我不确定如何使问题更清楚,但这基本上是问题所在:
我有一个课程是从我的另一个班级中挑选出来的。 基类具有重写的Tostring函数(返回由冒号分隔的2个字符串)。
问题是我的派生类可以有一个字符串数组或只有一个字符串,所以当我覆盖ToString函数时,我需要返回基类以及字符串数组(用“\ n”分隔)在派生类中。现在我想知道最好的方法是什么;我应该返回一个字符串数组(如果可能)或者我别无选择,只能使用Stringbuilder类?如果有另一种方法可以做到这一点,请告诉我们。无论他们多么疯狂,所有的想法都会受到欢迎:)
答案 0 :(得分:12)
当覆盖ToString
时,您 只返回一个字符串。您不能返回任何其他类型。听起来你可能想要这样的东西:
public override ToString()
{
return base.ToString() + "\n" + string.Join("\n", stringArray);
}
假设您要返回一个字符串,例如:
base1:base2
this1
this2
this3
其中行分隔符为\n
。
答案 1 :(得分:2)
“返回基类以及字符串数组”是什么意思?
如果你的意思是基类的ToString()方法,你可以尝试:
base.ToString() + "\n" + String.Join("\n", theStringArray );
答案 2 :(得分:1)
在我看来,你的设计中存在一些缺陷,但鉴于你所说的,没有办法从ToString()方法返回一个字符串数组。因此,您必须使用派生的。
来界定基类的ToString()返回值如
public override string ToString()
{
return base.ToString() + ':' + "whatever";
}
答案 3 :(得分:1)
正如Henri所提到的,返回base.ToString()然后你可以使用String.Replace用\ n替换冒号,然后将它与新派生的字符串组合。
当然,您可以在派生类中使用一个字符串,其形式为“string \ n string”,而在ToString函数中,您只需执行步骤替换,然后将两个字符串组合在一起。不需要数组,也不需要stringbuilder。如果您认为它们将是一个较低的字符串值组合在一起,这可能是最简单的选择。没有数组或字符串构建器。
答案 4 :(得分:1)
作为一般规则,最好使用Stringbuilder,而不是使用一长串+操作连接字符串。
如果您执行以下操作:
string sTemp = "This i" + "s an exa" + "ple string tha" + "t was broken.";
这实际上会在内存中创建七个字符串。
StringBuilder用于相同的功能只会创建五个,随着规模的增加,StringBuilder会更快地将所有这些字符串连接在一起,而不是简单地一个接一个地运行一堆+运算符。 / p>
如果您的连接列表没有提前预先确定,尤其如此,就像您的字符串对象数组一样。
答案 5 :(得分:0)
您可以使用基类中ToString()的返回值。
您可以通过
访问它base.ToString();