【发布时间】:2016-01-13 14:37:14
【问题描述】:
当常量表达式值为空时,如何确定它的类型?我之前一直在使用下面的代码检测类型,但是当ConstantExpression值为null时会导致null异常。
static Type GetType(Expression expression)
{
//causes exception when ((ConstantExpression)expression).Value is null
if (expression is ConstantExpression)
return ((ConstantExpression)expression).Value.GetType();
//Check other types
}
想象一下我的表情是这样创建的:-
int? value = null;
ConstantExpression expression = Expression.Constant(value);
我想确定int类型?
【问题讨论】:
-
((ConstantExpression)expression).Type? -
谢谢,这很简单!如果您添加答案,我可以接受。
-
看起来问题比我想象的要棘手。当您获得
null值的类型时,您将返回System.Object(因为每种类型最终都派生自该类型)。因此,您无法确定实际的type是什么,例如int?。我在这里学习关于可空值和类型检查的新东西。这就是我如此喜欢 StackOverflow 的原因。 -
@JasonEvans 是的,但
Expression.Constant()有一个重载,它采用显式类型(只要它与值兼容),所以如果有人可能关心ConstantExpression' s 类型,创建时可以使用它。有关更多信息,请参阅我的答案。
标签: c# reflection