将对象[,]转换为字符串[,]

本文关键字:字符串 转换 对象 | 更新日期: 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[,]当然包含strings(和数字,但现在这无关紧要(。

将对象[,]转换为字符串[,]

您可以像这个一样分配空间

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