我有以下功能:为什么将类型对象的动态转换为抛出空引用异常的对象?
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