実行時に値の型がわかっているだけの場合、オブジェクト[]をdouble []などの値型に変換できますか? .net組込み変換を使用してobject []内のオブジェクトをvalue要素型(doubleなど)に変換できない場合、例外は完全に許容されます。実行時にオブジェクト[]をValueType []に変換しようとしました
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);
}
本当に、二重配列を作成し、各オブジェクトを二重にしてインデックスに設定するだけではどうですか?シンプルなループ?オブジェクトの不正な配列を処理するために "if(obj is double){...}"を追加できます。 – SimpleVar
resultTypeはdouble型であることは保証されていません。実行時に決定されます。これは任意の値型にすることができます。 – SFun28
一般的なキャスト拡張の方法を使用しないのはなぜですか? ValueTypesに制約する場合は、Castメソッドを使用する独自のCastメソッドを作成できますが、 "!typeof(T).IsValueType"の場合はスローします。私の答えを見てください。 – SimpleVar