1

也许这听起来很奇怪,但想法是定义一个类,比如LargeString,它就像一个字符串,除了它不应该通过调用 '+=' 运算符来创建新的引用。

所以我可以将它LargeString用于连接,而不是StringBuilder-Class。

这应该看起来像这样:

LargeString s1 = "someLongString1";
LargeString s2 = "someLongString2";
LargeString s3 = s1 + s2;
s3 += "someLongString3"

然后最后一行不应该创建一个新的引用。这是否可以通过可重载运算符或其他技巧来实现?

注意:我知道我可以通过使用本地 Stringbuilder 成员创建一个类来轻松实现这一点
,但我真的很想找到一种更漂亮的方法。

4

2 回答 2

6

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您的设计存在重大缺陷,否则您可能希望将其包装为您的基本案例。

于 2013-05-24T16:51:59.957 回答
1

要解决LargeString s1 = "test1",您可以使用隐式用户定义的类型转换运算符并使其编译:

void Foo(string s)
{
}

LargeString largeString = "test";
Foo(largeString);
于 2013-05-24T16:46:56.563 回答