2009-08-10 89 views
0

我不知道如何使问题更清楚,但这是bascially问题:如何在重写的ToString函数中返回一个复合字符串?

我有一个从我的另一个类dervived类。 基类具有重写的Tostring函数(返回由冒号分隔的2个字符串)。

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

回答

12

当覆盖ToString时,你只返回一个字符串。你不能返回任何其他类型。这听起来像你可能想是这样的:

public override ToString() 
{ 
    return base.ToString() + "\n" + string.Join("\n", stringArray); 
} 

这是假设你想返回一个字符串,如:

base1:base2 
this1 
this2 
this3 

当行分隔符是\n

+0

非常感谢你 – 2009-08-10 21:39:03

+0

你应该使用'Environment.NewLine'作为分隔符,除非有特殊要求不这样做,其中'ToString()'实现通常不会是例外之一。 :) – 2009-08-11 05:21:58

+0

我只是在字符串中的“规范”。我甚至不确定我是否同意你的建议 - 就像使用Encoding.Default一样。不知道字符串将在哪里使用,没有人可能知道什么是正确的行结束符。 – 2009-08-11 05:23:54

0

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

您可以通过

base.ToString();来访问它。

1

在我看来,你的设计中存在一些缺陷,但考虑到你所说的,没有办法从ToString()方法返回一个字符串数组。所以你将不得不用派生的分隔基类的ToString()返回值。

public override string ToString() 
{ 
    return base.ToString() + ':' + "whatever"; 
} 
2

你所说的“回归的基类,以及字符串数组”是什么意思?

如果你的意思是基类的ToString()方法,你可以尝试:

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

我的意思是返回基类的ToString方法以及来自我的派生类的字符串数组 – 2009-08-10 21:36:36

1

正如亨利所说,返回base.ToString(),那么你可以用\ N使用字符串替换冒号。替换,然后将其与新派生的字符串组合。

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

1

作为一般规则,最好使用Stringbuilder而不是使用长操作来连接字符串。

如果你做到以下几点:

string sTemp = "This i" + "s an exa" + "ple string tha" + "t was broken."; 

内存这将真正创造七根弦。

  1. “这个我”
  2. “S的EXA”
  3. “这是一个EXA”
  4. “PLE为”
  5. “这是一个例子串THA”
  6. “吨坏了。”
  7. “这是一个被破坏的示例字符串。”

的使用StringBuilder为相同的功能只会创建五个,而随着规模的上升StringBuilder的将做连接所有这些字符串更快的工作一起比后只运行了一堆+运营商之一其他。

当你串连的列表中没有规定的时间提前,因为是你的字符串对象数组的情况下尤其如此。

相关问题