我有一个对象
,它的值可能是几种数组类型之一,比如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/