尝试在运行时将object []转换为ValueType []

时间:2012-04-21 01:09:00

标签: c# .net .net-4.0

当值类型仅在运行时已知时,是否可以将对象[]转换为值类型(如double [])?如果object []中的对象无法使用.net内置转换转换为值元素类型(例如double),则完全可以接受异常。

var original = new object[] { 1 , 2 , 3 , 4 , 5 , 6 }
Type resultType = typeof( double[] ); // or any means of getting a type at runtime
var result = ??

以下尝试失败了:

# error: Object must impliment IConvertible
Convert.ChangeType( original , resultType );

# error: Object cannot be stored in an array of this type.
var result = Array.CreateInstance( resultType , original.Length );
for ( int i = 0 ; i < original.Length ; i++ )
{
    result.SetValue( Convert.ChangeType( original[ i ] , resultType.GetElementType() ) , i );
}

2 个答案:

答案 0 :(得分:3)

你的最后一次尝试非常接近:第一行应该是

var result = Array.CreateInstance(resultType.GetElementType(), original.Length);

因为Array.CreateInstance元素类型作为其第一个参数。除此之外,它应该完美无缺。

答案 1 :(得分:0)

private T[] Cast<T>(params object[] items)
{
    if (!typeof(T).IsValueType)
    {
        throw new ArgumentException("Destined type must be Value Type");
    }

    return items.Cast<T>().ToArray();
}