也许这听起来很奇怪,但想法是定义一个类,比如说LargeString
,其中就像一个字符串,除非它不应该通过调用'+来创建一个新的引用='运营商。
所以我可以将此LargeString
用于连接,而不是StringBuilder
- 类。
这应该是这样的:
LargeString s1 = "someLongString1";
LargeString s2 = "someLongString2";
LargeString s3 = s1 + s2;
s3 += "someLongString3"
然后最后一行不应该创建新引用。 对于可重载的运算符或其他技巧,这有可能吗?
注意:我知道我可以通过创建一个带有本地的类来轻松实现这一点 Stringbuilder成员,但我真的很想找到更漂亮的 方式。
答案 0 :(得分: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
对您的设计有重大缺陷,否则您可能希望将其包装为您的基本案例。
答案 1 :(得分:1)
要解决LargeString s1 = "test1"
,您可以使用implicit user-defined type conversion operators并将其设置为可编译:
void Foo(string s)
{
}
LargeString largeString = "test";
Foo(largeString);