2

値型が実行時にのみ認識されている場合、object[]を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 );
}
4

2 に答える 2

3

あなたの最後の試みは非常に近いものでした: 最初の行は

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

要素の型Array.CreateInstanceを最初のパラメーターとして受け取るためです。それ以外は、完全に機能するはずです。

于 2012-04-21T01:25:36.917 に答える
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();
}
于 2012-04-21T03:38:52.963 に答える