将一个对象转换为多维字符串数组

3

我看过如何使用以下代码将对象转换为字符串数组:

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

我的问题是,如果 paraArray 是一个对象(但其中的数据是一个多维数组),我该如何将其转换为多维字符串数组?


那段代码并没有将任何内容转换为 string 数组。它是将列表中的每个 object 转换为 string,然后创建一个新的 string 数组,并用这些值填充它。你似乎对强制类型转换的实际作用存在一些严重的误解。将某个东西强制转换为 string 数组应该像这样:var myArray = (string[]) myObject; - jmcilhinney
数据是什么的多维数组?对象? - downrep_nation
是的,paraArray作为一个对象传递给了这个函数。虽然我知道这个对象包含了字符串和双精度数据的行和列。 - mHelpMe
2个回答

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();

2d数组在使用Linq时并不是非常方便,这就是为什么经常使用jagged数组(数组的数组)更可取的原因:

  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();

没问题,它可以是一个交错数组。我会试一下的。如果我的paraArray作为一个对象被传递,我能使用GetLength方法吗?或者我得先对paraArray做些什么呢? - mHelpMe
对象不会自然继承长度方法,您需要将其转换。 - downrep_nation
@downrep_nation:我在数组arr上调用了方法arr.GetLength(...),而arr数组,不仅仅是object - Dmitry Bychenko
@DmitryBychenko 没问题,我正在回答提问者的问题。 - downrep_nation

3

您可以使用 Array.Copy 而不是使用 LINQ,就像这个答案中所示。

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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接