将对象[,]转换为字符串[,]
本文关键字:字符串 转换 对象 | 更新日期: 2023-09-27 18:11:41
如何将object[,]
转换为string[,]
?
Object[,] myObjects= // sth
string[,] myString = // ?!? Array.ConvertAll(myObjects, s => (string)s) // this doesn't work
欢迎提出任何建议。
EDIT:当然,循环解决方案显然可以做到这一点,但我一直在设想一个在代码和性能方面都更优雅的解决方案。
第2版:object[,]
当然包含string
s(和数字,但现在这无关紧要(。
您可以像这个一样分配空间
string[,] myString = new string[myObjects.GetLength(0),myObjects.GetLength(1)];
然后一些循环应该可以正常工作,比如:
for(int k=0;k < myObjects.GetLength(0);k++)
for(int l=0;l < myObjects.GetLength(1);l++)
myString[k,l] = myObjects[k,l].ToString();
Object[,] myObjects = new Object[3, 2] { { 1, 2 }, { 3, 4 },
{ 5, 6 } };
string[,] myString = new string[3, 2];
for (int i = myObjects.GetLowerBound(0); i < myObjects.GetUpperBound(0); i++)
{
for (int j = myObjects.GetLowerBound(1); j < myObjects.GetUpperBound(1); j++)
{
myString[i, j] = myObjects[i, j].ToString();
}
}
foreach (var item in myString)
{
Console.WriteLine("{0} - {1}", item.GetType(), item);
}
输出将为;
System.String - 1
System.String - 2
System.String - 3
System.String - 4
System.String - 5
System.String - 6
考虑到其他答案,为2D阵列编写自己的ConvertAll
方法真的很容易:
public static TOutput[,] ConvertAll<TInput, TOutput>(TInput[,] array, Func<TInput, TOutput> converter)
{
var result = new TOutput[array.GetLength(0), array.GetLength(1)];
for (int i = 0; i < array.GetLength(0); ++i)
for (int j = 0; j < array.GetLength(1); ++j)
result[i, j] = converter(array[i, j]);
return result;
}
只是因为的作者。NET并不想包含这个方法,没有必要完全放弃。你自己写是很直接的。
(如果你愿意,你可以把它作为一种扩展方法。(
在注释后编辑:如果你真的想处理下界(在某些维度上(不为零的数组,它是这样的:
public static TOutput[,] ConvertAll<TInput, TOutput>(TInput[,] array, Func<TInput, TOutput> converter)
{
int xMin = array.GetLowerBound(0);
int xLen = array.GetLength(0);
int yMin = array.GetLowerBound(1);
int yLen = array.GetLength(1);
var result = (TOutput[,])Array.CreateInstance(typeof(TOutput), new[] { xLen, yLen, }, new[] { xMin, yMin, });
for (int x = xMin; x < xMin + xLen; ++x)
for (int y = yMin; y < yMin + yLen; ++y)
result[x, y] = converter(array[x, y]);
return result;
}
这应该是最简单、最快的方法之一,假设src
数组中的每个元素都可以强制转换为dst
数组类型。
object[,] src = new object[,]
{
{"foo", "bar"},
{"spam", "eggs"},
};
string[,] dest = new string[src.GetLength(0), src.GetLength(1)];
Array.Copy(src, dest, src.Length);