1
A
回答
4
通常,如果您想要如何为某个表达式构建表达式树,请让C#编译器执行该操作并检查结果。
但在这种情况下,它不起作用,因为“表达式树lambda可能不包含空传播运算符。”但是你实际上并不需要空传播运算符,你只需要一些行为像一样的东西。
你可以通过创建一个如下所示的表达式来实现:o == null ? null : o.Value
。在代码中:
public Expression CreateNullPropagationExpression(Expression o, string property)
{
Expression propertyAccess = Expression.Property(o, property);
var propertyType = propertyAccess.Type;
if (propertyType.IsValueType && Nullable.GetUnderlyingType(propertyType) == null)
propertyAccess = Expression.Convert(
propertyAccess, typeof(Nullable<>).MakeGenericType(propertyType));
var nullResult = Expression.Default(propertyAccess.Type);
var condition = Expression.Equal(o, Expression.Constant(null, o.Type));
return Expression.Condition(condition, nullResult, propertyAccess);
}
相关问题
- 1. 表达式树
- 2. 表达式“variable,variable = value;”
- 3. Java表达式树
- 4. lambda表达式树
- 5. 表达式树的MongoDB LINQ
- 6. 表达式树NHibernate的
- 7. 使用表达式树的另一种表达树
- 8. 表达式树和PropertyDescriptor
- 9. VisualBasic到Linq表达式树
- 10. 表达式树转换
- 11. 验证表达式树
- 12. 评估表达式树
- 13. 表达式树评估
- 14. 转换表达式树
- 15. 遍历表达式树
- 16. 构建表达式树
- 17. 表达式树构造?
- 18. 构建表达式树
- 19. 使用表达式树
- 20. 正则表达式相邻字符
- 21. 表达式树的后缀表示法
- 22. 使用表达式树中属性表达式的值
- 23. “In”操作的表达式树二进制表达式
- 24. 将垂直树的树形树转换为s表达式
- 25. 如何用正则表达式替换<tag value =“value”>到$ tag ['$ thepreviousvalue']用正则表达式
- 26. 单表格中的邻接树
- 27. 列表<object>。载表达式树
- 28. 将算术表达式表示为树
- 29. 哪里有表达式转换为表达式树并解决?
- 30. 用布尔表达式解析表达式树
你读过吗? http://stackoverflow.com/questions/28880025/why-cant-i-use-the-null-propagation-operator-in-lambda-expressions –
我的意思是使用'Expression.constructors-like'方法。 – Jordi