检查表达式树中值是否为空的最佳方法
Best way to check if value is null in Expression Tree
检查表达式树中常量是否为 null 的最佳方法是什么?
// Method to call (Regex.IsMatch)
MethodInfo isMatchMethod = typeof(Regex).GetMethod("IsMatch", new[] { typeof(string), typeof(string), typeof(RegexOptions) });
// The member you want to evaluate: (x => x.<property_name>)
var member = Expression.Property(param, propertyName);
// The value you want to evaluate
var constant = Expression.Convert(Expression.Constant(value), type);
// How to check if constant is null???
var expr = Expression.Call(isMatchMethod, member, constant, Expression.Constant(RegexOptions.IgnoreCase));
// Doesn't work
// Expression notNullConstant = value != null ? constant : Expression.Convert(Expression.Constant(string.Empty), type);
//var expr = Expression.Call(isMatchMethod, member, notNullConstant, Expression.Constant(RegexOptions.IgnoreCase));
不确定是什么问题。您可以将 a ?? b
按字面意思翻译成具有 Expression.Coalesce
的树。如果有疑问,请使用 C# 编译器编译表达式并查看它的作用。
同时你问了如何编译?:
。答案是一样的:简单地反编译现有代码以查看输出的内容。使用 Expression.Condition
.
检查表达式树中常量是否为 null 的最佳方法是什么?
// Method to call (Regex.IsMatch)
MethodInfo isMatchMethod = typeof(Regex).GetMethod("IsMatch", new[] { typeof(string), typeof(string), typeof(RegexOptions) });
// The member you want to evaluate: (x => x.<property_name>)
var member = Expression.Property(param, propertyName);
// The value you want to evaluate
var constant = Expression.Convert(Expression.Constant(value), type);
// How to check if constant is null???
var expr = Expression.Call(isMatchMethod, member, constant, Expression.Constant(RegexOptions.IgnoreCase));
// Doesn't work
// Expression notNullConstant = value != null ? constant : Expression.Convert(Expression.Constant(string.Empty), type);
//var expr = Expression.Call(isMatchMethod, member, notNullConstant, Expression.Constant(RegexOptions.IgnoreCase));
不确定是什么问题。您可以将 a ?? b
按字面意思翻译成具有 Expression.Coalesce
的树。如果有疑问,请使用 C# 编译器编译表达式并查看它的作用。
同时你问了如何编译?:
。答案是一样的:简单地反编译现有代码以查看输出的内容。使用 Expression.Condition
.