C# 转换表达式<;Func<;t模型,布尔值?>&燃气轮机;表达<;Func<;t模型,布尔值>&燃气轮机;
ASP.NET MVC中的一个方法需要一个表达式C# 转换表达式<;Func<;t模型,布尔值?>&燃气轮机;表达<;Func<;t模型,布尔值>&燃气轮机;,c#,generics,lambda,expression-trees,expression,C#,Generics,Lambda,Expression Trees,Expression,ASP.NET MVC中的一个方法需要一个表达式expression(在屏幕上显示一个复选框HTML控件),但我的成员是Boolean? 在我们的例子中,对于这种特定情况,null与false相同,必须显示一个未选中的HTML复选框 如何将Expression转换为Expression添加类似value=nullableValue.HasValue&&nullableValue.value的内容 请记住,结果的表达式必须仍然是成员表达式,这让我想知道这是否可能 干杯。如果您正在访问一个值属性(如
expression
(在屏幕上显示一个复选框HTML控件),但我的成员是Boolean?
在我们的例子中,对于这种特定情况,null
与false
相同,必须显示一个未选中的HTML复选框
如何将Expression
转换为Expression
添加类似value=nullableValue.HasValue&&nullableValue.value的内容
请记住,结果的表达式
必须仍然是成员表达式
,这让我想知道这是否可能
干杯。如果您正在访问一个值属性(如int
,bool
等),您将不会得到MemberExpression
,而是UnaryExpression
,因为底层的MemberExpression
被包装在负责执行Convert
操作的UnaryExpression
中
这似乎是因为值类型不是引用类型,并且不接受null
值
如果您愿意接受获取UnaryExpression
,可以通过以下方式进行:
Expression<Func<TModel, Boolean?>> source = ...
var resultBody = Expression.Convert(source.Body, typeof(Boolean));
var result = Expression.Lambda<Func<TModel, Boolean>>(resultBody, source.Parameters);
表达式源=。。。
var resultBody=Expression.Convert(source.Body,typeof(Boolean));
var result=Expression.Lambda(resultBody,source.Parameters);
您可能会觉得有用的堆栈溢出 如果您只想为可空布尔值指定一个默认值,请使用短语nullableValue??错误
。??
如果有值,将使用它的值,如果没有,则使用您指定的值。好吧,应用程序实际上并没有赋值。它只使用这些类来生成HTML模板,但不使用这些类的任何实例。