也许这听起来很奇怪,但其想法是定义一个类,例如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的设计存在重大缺陷,否则您可能需要将其包装为基本情况。

09-25 21:33