c# - 如何将对象转换为对象[]

标签 c#

我有一个对象,它的值可能是几种数组类型之一,比如int[]string[],我想将其转换为 string[]。我的第一次尝试失败了:

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

运行时错误 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());
        // ...
    }
}

我想这没问题,但看起来很复杂。谁有更简单的方法?

最佳答案

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

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

(请注意,这将保留空值,而不是抛出异常。它也适用于任何 IEnumerable,而不仅仅是数组。)

关于c# - 如何将对象转换为对象[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9911141/

相关文章:

c# - 嵌套对象初始化语法

c# - MVC 中的 OAuth 2.0 Mailkit "Authentication failed",但 C# 控制台应用程序工作正常

c# - Azure表存储查询分区键

c# - 无效的文本区域

c# - ASCIIEncoding.GetString(byte[]) 之后表示空字节的字符是什么?

c# - Visual Studio 2015、Nuget 和 “same key has already been added.”

java - AudioRecord.StartRecording() 抛出 Java.Lang.IllegalException 表示未初始化的 AudioRecorder

c# - Entity Framework 代码优先 IQueryable

c# - HTMLAgilityPack 和加载超时

c# - 向 TextBox 添加新的数据行