如何将对象转换为对象[]

Ric*_*ohr 13 c#

我有一个object值可能是像int[]或的几种数组类型之一string[],我想将它转换为string[].我的第一次尝试失败了

void Do(object value)
{
    if (value.GetType().IsArray)
    {
        object[] array = (object[])value;
        string[] strings = Array.ConvertAll(array, item => item.ToString());
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

运行时错误Unable to cast object of type 'System.Int32[]' to type 'System.Object[]',回想起来很有意义,因为我int[]不包含盒装整数.

我四处寻找这个工作版本:

void Do(object value)
{
    if (value.GetType().IsArray)
    {
        object[] array = ((Array)value).Cast<object>().ToArray();
        string[] strings = Array.ConvertAll(array, item => item.ToString());
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想这没关系,但看起来很复杂.谁有更简单的方法?

Jon*_*eet 18

您不需要将其转换为数组,然后使用LINQ.您可以采用更流式的方式进行,最后只转换为数组:

var strings = ((IEnumerable) value).Cast<object>()
                                   .Select(x => x == null ? x : x.ToString())
                                   .ToArray();
Run Code Online (Sandbox Code Playgroud)

(请注意,这将保留空值,而不是抛出异常.它对任何数据都很好IEnumerable,而不仅仅是数组.)