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

C# 如何在重写的ToString函数中返回复合字符串?,c#,.net,C#,.net,我不知道如何使问题更清楚,但这是最基本的问题: 我有一门课是从我的另一门课改过来的。 基类有一个重写的Tostring函数(返回两个由冒号分隔的字符串) 问题是,我的派生类可以有一个字符串数组,也可以只有一个字符串,因此当我重写ToString函数时,我需要返回派生类中的基类以及字符串数组(以“\n”分隔)。现在我想知道做这件事最好的方法是什么;我应该返回字符串数组(如果可能的话),还是除了使用Stringbuilder类之外别无选择?如果有其他方法,请告诉我。。欢迎所有想法,无论它们有多疯狂:

我不知道如何使问题更清楚,但这是最基本的问题:

我有一门课是从我的另一门课改过来的。 基类有一个重写的Tostring函数(返回两个由冒号分隔的字符串)


问题是,我的派生类可以有一个字符串数组,也可以只有一个字符串,因此当我重写ToString函数时,我需要返回派生类中的基类以及字符串数组(以“\n”分隔)。现在我想知道做这件事最好的方法是什么;我应该返回字符串数组(如果可能的话),还是除了使用Stringbuilder类之外别无选择?如果有其他方法,请告诉我。。欢迎所有想法,无论它们有多疯狂:)

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

你可以通过


base.ToString()

重写
ToString
时,只需返回一个字符串。不能返回任何其他类型。听起来你可能想要这样的东西:

public override ToString()
{
    return base.ToString() + "\n" + string.Join("\n", stringArray);
}
假设您希望返回一个字符串,例如:

base1:base2
this1
this2
this3

行分隔符位于
\n

的位置,在我看来,您的设计似乎有缺陷,但根据您所说的,无法从ToString()方法返回字符串数组。因此,您必须用派生的字符串分隔基类的ToString()返回值

比如

public override string ToString()
{
   return base.ToString() + ':' + "whatever";
}
“返回基类和字符串数组”是什么意思

如果您是指基类的ToString()方法,可以尝试:

base.ToString() + "\n" + String.Join("\n", theStringArray );

如Henri所述,返回base.ToString(),然后可以使用字符串\n替换冒号。替换,然后将其与新派生的字符串组合


当然,您可以在派生类中使用“string\n string”形式的字符串,在ToString函数中只需执行替换步骤,然后将两个字符串组合在一起。不需要阵列,不需要stringbuilder。如果您认为它们的字符串值很低,那么这可能是最简单的选择。没有数组或stringbuilder。

一般来说,使用stringbuilder比使用一长串+操作连接字符串要好

如果您执行以下操作:

string sTemp = "This i" + "s an exa" + "ple string tha" + "t was broken.";
这实际上会在内存中创建七个字符串

  • “这个我”
  • “这是一个exa”
  • “这是一个exa”
  • “到”
  • “这是一个示例字符串”
  • “它坏了。”
  • “这是一个断开的示例字符串。”
  • 为相同功能使用StringBuilder只会创建五个,随着比例的增加,StringBuilder将更快地将所有这些字符串连接在一起,而不是简单地一个接一个地运行一组+运算符


    当您的连接列表不是预先确定的时,尤其如此,与字符串对象数组的情况一样。

    我的意思是返回基类的ToString方法以及派生类中的字符串数组。您应该使用
    Environment.NewLine
    作为分隔符,除非有特殊要求,其中a
    ToString()
    实施通常不属于例外情况之一。:)我只是按照字符串中的“规范”进行操作。我甚至不确定我是否同意你的建议——这就像使用
    编码。默认值
    。如果不知道字符串将在哪里使用,就没有人可能知道右行终止符是什么。