我有以下功能:爲什麼將類型對象的動態轉換爲拋出空引用異常的對象?
public static T TryGetArrayValue<T>(object[] array_, int index_)
{
... //some checking goes up here not relevant to question
dynamic boxed = array_[index_];
return (T)boxed;
}
當我把它以下列方式,
object a = new object();
object v = TUtils.TryGetArrayValue<object>(new object[] { a }, 0);
(T)boxed
拋出一個空引用異常。
除了「對象」以外,我放入其他任何類型,它工作得很好。
任何想法這是什麼,以及它爲什麼拋出異常?
編輯: 爲什麼我用動態的原因是轉換類型時,例如爲了避免異常:
double a = 123;
int v = TUtils.TryGetArrayValue<int>(new object[] { a }, 0);
檢查鑄造前是否有「boxed」爲空。 – 2012-03-29 18:56:42
這可能是'dynamic'實現的一個錯誤。現在檢查4.5中的這個repros。 – dlev 2012-03-29 19:01:12
Repro - 它的確看起來像一個bug,它是如何處理'dynamic'的 - 這個問題是有效的 – BrokenGlass 2012-03-29 19:02:00