为大字符串标识自己的字符串对象?

时间:2013-05-24 16:43:49

标签: c# string

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

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

这应该是这样的:

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

然后最后一行不应该创建新引用。 对于可重载的运算符或其他技巧,这有可能吗?

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

2 个答案:

答案 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);