Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为大字符串标识自己的字符串对象?_C#_String - Fatal编程技术网

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

C# 为大字符串标识自己的字符串对象?,c#,string,C#,String,也许这听起来很奇怪,但是我们的想法是定义一个类,比如LargeString,它的行为就像一个字符串,只是它不应该通过调用“+=”操作符来创建一个新的引用 因此,我可以将这个最大的字符串用于连接,而不是StringBuilder类 这应该是这样的: LargeString s1 = "someLongString1"; LargeString s2 = "someLongString2"; LargeString s3 = s1 + s2; s3 += "someLongString3" 那么最

也许这听起来很奇怪,但是我们的想法是定义一个类,比如LargeString,它的行为就像一个字符串,只是它不应该通过调用“+=”操作符来创建一个新的引用

因此,我可以将这个最大的字符串用于连接,而不是StringBuilder类

这应该是这样的:

LargeString s1 = "someLongString1";
LargeString s2 = "someLongString2";
LargeString s3 = s1 + s2;
s3 += "someLongString3"
那么最后一行不应该创建新的引用。 这在重载运算符或其他技巧中是否可能

注意:我知道通过创建一个带有本地 Stringbuilder成员,但我真的很想找到一个更漂亮的 方法。

要解决最大s1=test1问题,您可以使用并使其编译:

void Foo(string s)
{
}

LargeString largeString = "test";
Foo(largeString);
要解决最大的s1=test1问题,您可以使用并使其编译:

void Foo(string s)
{
}

LargeString largeString = "test";
Foo(largeString);

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

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在您的设计中有一个主要缺陷,否则您可能会希望将其包装为基本情况。

AFAIK,这是完全不可能的。如果你想知道,语法注释1是不正确的。您可以提供从字符串到最大字符串的隐式转换。所有这些都是为了避免stringBuilder.Append?这个类做什么而stringBuilder不做什么?我不确定我是否理解你所说的比包装StringBuilder更美观的意思——StringBuilder上的立面似乎是显而易见的解决方案。否则,您将面临重新实现StringBuilder的行为,不是吗?这没有什么美感……好吧,那完全不可能。如果你想知道,语法注释1是不正确的。您可以提供从字符串到最大字符串的隐式转换。所有这些都是为了避免stringBuilder.Append?这个类做什么而stringBuilder不做什么?我不确定我是否理解你所说的比包装StringBuilder更美观的意思——StringBuilder上的立面似乎是显而易见的解决方案。否则,您将面临重新实现StringBuilder的行为,不是吗?这并没有什么美感…+1:MSDN链接-+1:到目前为止,我喜欢这个答案。如果没有更好的结果,我会再等一段时间并接受它。@FabianBigler:请注意,因为a=b+c将导致a==b.+1:MSDN链接-+1:我喜欢这个答案。如果没有更好的结果,我会再等一段时间,接受这个事实。@FabianBigler:请注意,因为a=b+c将导致a==b。最大的s3=s1+s2;这仍然是一个问题。但是,LargeString可以像StringBuilder一样实现追加,然后按照自己的喜好实现内存管理。其他最大对象的列表?最大s3=s1+s2;这仍然是一个问题。但是,LargeString可以像StringBuilder一样实现追加,然后按照自己的喜好实现内存管理。其他大型物体的列表?