也许这听起来很奇怪,但其想法是定义一个类,例如LargeString
,它的作用类似于字符串,只是它不应通过调用'+ ='运算符来创建新引用。
因此,我可以将此LargeString
用于串联,而不是StringBuilder
-Class。
看起来应该像这样:
LargeString s1 = "someLongString1";
LargeString s2 = "someLongString2";
LargeString s3 = s1 + s2;
s3 += "someLongString3"
然后,最后一行不应创建新的引用。
使用可重载的运算符或其他技巧可以通过某种方式实现吗?
注意:我知道我可以通过创建一个带有本地变量的类来轻松实现
Stringbuilder成员,但我真的很想找到一个更漂亮的
道路。
最佳答案
C#不允许重载=
运算符或+=
运算符。 +=
运算符将使用任何适当的+
运算符,但将始终执行+
,后跟=
。
唯一的选择是重写+
运算符以返回左实例,例如:
//Allows no copy +=
public static operator +(LongString left, LongString right)
{
left.Add(right);
return left;
}
//Allows assignment of string to LongString
public static implicit operator LongString(string original)
{
return new LongString(original);
}
但是我强烈不建议这样做,因为它根本不是标准的,并且会使使用它的任何人感到困惑。
关于实际实现,除非
StringBuilder
的设计存在重大缺陷,否则您可能需要将其包装为基本情况。