c#.net覆盖多维数组的ToString

Kei*_*ith 2 c# multidimensional-array visual-studio-2015

我有一个主要为其调用者提供2d数组的类(解析文件后).它返回这个数组很好,但我需要为该调用者提供一种方法将该2d数组转换为多分隔字符串.下面的伪代码.

完全披露:我的大部分时间都是在其他软件中编写脚本,所以我在OOP中有点生疏,特别是在c#中

我希望调用者能够:

string[,] results;
getArray (arg1, arg2, etc, out results);
Debug.WriteLine(results.ToString(delim1, delim2));
Run Code Online (Sandbox Code Playgroud)

但我不清楚如何为ToString()创建这个覆盖,如:

public override string[,] ToString(string rowSeparator, string columnSeparator)
{
    string retVal = "";
    for(int r = 0; r < this.getUpperBound(0); r ++)
    {
        for (int c = 0; c < this.getUpperBound(1); c++)
        {
            retVal += this[r,c];
            if (c + 1 < this.getUpperBound(1)) 
            {
                retVal += columnSeparator;
            }
        }
        if (r + 1 < this.getUpperBound(0))
        {
            retVal += rowSeparator;
        }
    }
    return retVal;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

这不是重写任何事情 - 你试图重载现有的ToString方法.这是一个很好的工作,你不是要试图覆盖任何东西,因为你基本上不能这样做 - 你只能覆盖类声明中的成员,你不能自己声明string[,]该类.

您可以使用扩展方法实现目标:

public static class ArrayExtensions
{
    public static string ToString(
        this string[,] array, string rowSeparator, string columnSeparator)
    {
        // Code as per your method, but using array instead of this
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,调用者需要具有using包含命名空间ArrayExtensionsusing static指令或ArrayExtensions类本身的指令,以便将其用作扩展方法.

我还建议StringBuilder在您的实现中使用而不是重复的字符串连接.

  • @Keith:如果`ArrayExtensions`在`Foo.Bar`的命名空间中,你只需要一个`using Foo.Bar;的使用指令. (2认同)