将对象强制转换为多维字符串数组

时间:2016-08-11 07:09:56

标签: c# arrays .net

我已经看过如何使用下面的代码将对象强制转换为字符串数组

string[] arr = ((IEnumerable)paraArray).Cast<object>()
                             .Select(x => x.ToString())
                             .ToArray();

我的问题是,如果paraArray是一个对象(但数据是一个多维数组),我怎样才能将它转换为多维字符串数组?

2 个答案:

答案 0 :(得分:5)

您无法通过ToArray实现此目的。最好的,恕我直言,你可以做的是

  object[,] paraArray = new object[,] {
    {1, 2, 3 },
    {4, 5, 6 },
  };

  ...

  string[,] arr = new string[paraArray.GetLength(0), paraArray.GetLength(1)];

  for (int i = 0; i < arr.GetLength(0); ++i)
    for (int j = 0; j < arr.GetLength(1); ++j)
      arr[i, j] = paraArray[i, j].ToString();
使用Linq时,

2d 数组不是很方便,这就是为什么锯齿状的数组(数组数组)更可取的原因:

  object[][] paraArray = new object[][] {
    new object[] {1, 2, 3 },
    new object[] {4, 5, 6 },
  };

  ... 

  // Working with jagged array is much easier than with 2d one 
  string[][] arr = paraArray
    .Select(line => line
       .Select(item => item.ToString())
       .ToArray())
    .ToArray();

答案 1 :(得分:3)

您可以使用Array.Copy,而不是使用LINQ,而不是this answer

object[,] paraArray = new object[2, 2] { { "a", "b" }, { "c", "d" } };

string[,] stringArray = new string[paraArray.GetLength(0), paraArray.GetLength(1)];

for (int i = 0; i < paraArray.GetLength(0); ++i)
{
    Array.Copy(paraArray, i * paraArray.GetLength(1), stringArray, i * stringArray.GetLength(1), paraArray.GetLength(1));
}