我看过如何使用以下代码将对象转换为字符串数组:
string[] arr = ((IEnumerable)paraArray).Cast<object>()
.Select(x => x.ToString())
.ToArray();
我的问题是,如果 paraArray 是一个对象(但其中的数据是一个多维数组),我该如何将其转换为多维字符串数组?
你无法通过 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();
arr
上调用了方法arr.GetLength(...)
,而arr
是数组,不仅仅是object
。 - Dmitry Bychenko您可以使用 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));
}
string
数组。它是将列表中的每个object
转换为string
,然后创建一个新的string
数组,并用这些值填充它。你似乎对强制类型转换的实际作用存在一些严重的误解。将某个东西强制转换为string
数组应该像这样:var myArray = (string[]) myObject;
。 - jmcilhinney