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. 轉換lambda表達式表達式樹
- 4. Java表達式樹
- 5. C表達式樹#
- 6. lambda表達式樹
- 7. LINQ表達式樹
- 8. 最快XPath表達式:value-of的
- 9. 異常的表達式樹
- 10. 表達式樹NHibernate的
- 11. 表達式樹的執行
- 12. 表達式樹的MongoDB LINQ
- 13. 使用表達式樹的另一種表達樹
- 14. 解析器樹或表達式樹
- 15. LINQ表達式樹是否合適樹?
- 16. 表達式樹評估
- 17. 表達式樹和PropertyDescriptor
- 18. 擴展表達式樹
- 19. 使用表達式樹
- 20. 從表達式樹C#
- 21. 構建表達式樹
- 22. 通過表達式樹
- 23. boost.proto +修改表達式樹
- 24. 表達式樹構造?
- 25. 評估表達式樹
- 26. VisualBasic到Linq表達式樹
- 27. 遍歷表達式樹
- 28. C#表達式樹綁定
- 29. 從表達式創建樹
- 30. 構建表達式樹
你讀過嗎? http://stackoverflow.com/questions/28880025/why-cant-i-use-the-null-propagation-operator-in-lambda-expressions –
我的意思是使用'Expression.constructors-like'方法。 – Jordi