如何在重写的ToString函数中返回复合字符串?

时间:2009-08-10 20:48:57

标签: c# .net

我不确定如何使问题更清楚,但这基本上是问题所在:

我有一个课程是从我的另一个班级中挑选出来的。 基类具有重写的Tostring函数(返回由冒号分隔的2个字符串)。

问题是我的派生类可以有一个字符串数组或只有一个字符串,所以当我覆盖ToString函数时,我需要返回基类以及字符串数组(用“\ n”分隔)在派生类中。现在我想知道最好的方法是什么;我应该返回一个字符串数组(如果可能)或者我别无选择,只能使用Stringbuilder类?如果有另一种方法可以做到这一点,请告诉我们。无论他们多么疯狂,所有的想法都会受到欢迎:)

6 个答案:

答案 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.";

这实际上会在内存中创建七个字符串。

  1. “这个我”
  2. “s exa”
  3. “这是一个exa”
  4. “ple to”
  5. “这是一个示例字符串tha”
  6. “t被打破了。”
  7. “这是一个被破坏的示例字符串。”
  8. StringBuilder用于相同的功能只会创建五个,随着规模的增加,StringBuilder会更快地将所有这些字符串连接在一起,而不是简单地一个接一个地运行一堆+运算符。 / p>

    如果您的连接列表没有提前预先确定,尤其如此,就像您的字符串对象数组一样。

答案 5 :(得分:0)

您可以使用基类中ToString()的返回值。

您可以通过

访问它

base.ToString();