只有在運行時才知道值類型時,是否可以將對象[]轉換爲值類型,如double []?如果object []中的對象無法使用.net內置轉換轉換爲值元素類型(例如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 2012-04-21 02:57:17
resultType不保證是雙倍的。它在運行時確定。它可以是任何值類型。 – SFun28 2012-04-21 03:10:21
爲什麼不使用通用Cast擴展方法?如果你想約束到ValueTypes,你可以創建你自己的Cast方法,該方法使用擴展Cast方法,但在「!typeof(T).IsValueType」時拋出。看看我的答案。 – SimpleVar 2012-04-21 03:36:55