【发布时间】:2012-04-13 11:14:50
【问题描述】:
我有以下功能:
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 抛出空引用异常。
除了“对象”之外,我放入的任何其他类型都可以正常工作。
知道这是什么,为什么会抛出异常?
编辑: 我之所以使用dynamic,是为了避免在转换类型时出现异常,例如:
double a = 123;
int v = TUtils.TryGetArrayValue<int>(new object[] { a }, 0);
【问题讨论】:
-
在转换之前检查
boxed是否为空。 -
这可能是
dynamic实现方式中的一个错误。现在在 4.5 中检查此重现。 -
Repro - 它看起来确实像处理
dynamic的错误 - 问题是有效的 -
+1 - 似乎只有在转换为泛型类型时才会重现。
标签: c# .net dynamic nullreferenceexception