gpt4 book ai didi

c# - 当值为空时从 ConstantExpression 获取值类型

转载 作者:行者123 更新时间:2023-11-30 23:30:59 30 4
gpt4 key购买 nike

当 ConstantExpression 值为 null 时,如何确定它的类型?我以前一直使用以下代码检测类型,但是当 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?

最佳答案

expression.Type

但是,请注意,如果您使用问题中显示的工厂方法创建一个 ConstantExpression,结果将是 typeof(object),因为当工厂检查value 它将获得一个空对象并且无法对其调用 GetType()。如果您要关心 ConstantExpression 的类型,即使是 null,您也需要使用传入类型参数的重载。这也意味着,如果 value 不是 null,则返回的类型将是 typeof(int),而不是 typeof(int ?):

Expression.Constant((int?)null).Type // == typeof(object)
Expression.Constant((int?)null, typeof(int?)).Type // == typeof(int?)
Expression.Constant(null, typeof(int?)).Type // == typeof(int?)
Expression.Constant((int?)3).Type // == typeof(int)
Expression.Constant((int?)3).Value.GetType() // == typeof(int)
Expression.Constant((int?)3, typeof(int?)).Type // == typeof(int?)
Expression.Constant(3, typeof(int?)).Type // == typeof(int?)

最后但同样重要的是:

Expression.Constant(null, typeof(int)) // ArgumentException thrown, "Argument types do not match"

关于c# - 当值为空时从 ConstantExpression 获取值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34769407/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com