代码之家  ›  专栏  ›  技术社区  ›  Dark Star1

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

  •  0
  • Dark Star1  · 技术社区  · 15 年前

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

    我有一门课与我的另一门课脱节了。 基类具有重写的ToString函数(返回由冒号分隔的2个字符串)。

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

    6 回复  |  直到 15 年前
        1
  •  12
  •   Jon Skeet    15 年前

    当超越 ToString 只返回一个字符串。不能返回任何其他类型。听起来你可能想要这样的东西:

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

    假设您希望返回一个字符串,例如:

    base1:base2
    this1
    this2
    this3
    

    行分隔符所在的位置 \n .

        2
  •  2
  •   Richard Lennox    15 年前

    “返回基类和字符串数组”是什么意思?

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

    base.ToString() + "\n" + String.Join("\n", theStringArray );
    
        3
  •  1
  •   DevDevDev    15 年前

    在我看来,您的设计中有一些缺陷,但是考虑到您所说的,无法从ToString()方法返回字符串数组。所以您必须用派生的来分隔基类的toString()返回值。

    public override string ToString()
    {
       return base.ToString() + ':' + "whatever";
    }
    
        4
  •  1
  •   Kevin LaBranche    15 年前

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

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

        5
  •  1
  •   Ubiquitous Che    15 年前

    一般来说,使用StringBuilder比使用一行+操作连接字符串要好。

    如果您执行以下操作:

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

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

    1. “这我”
    2. “A·EXA”
    3. “这是一个exa”
    4. “to to”
    5. “这是一个示例字符串tha”
    6. “T被打破了。”
    7. “这是一个断开的示例字符串。”

    将StringBuilder用于相同功能只会创建五个,随着规模的扩大,StringBuilder将更快地将所有这些字符串连接在一起,而不是一个接一个地运行一组+运算符。

    当您的串联列表没有提前预先确定时,这一点尤其正确,字符串对象数组也是如此。

        6
  •  0
  •   Henri    15 年前

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

    你可以通过

    base.toString();