C# 将lambda中的可空布尔值转换为正则布尔值
我在视图中为C# 将lambda中的可空布尔值转换为正则布尔值,c#,lambda,C#,Lambda,我在视图中为bool?字段设置了一个CheckBoxFor,但是它用红色下划线表示: 无法隐式转换布尔?对布尔来说,你缺演员了吗 问题是,这在lambda中: bool? nullable {get; set;} CheckBoxFor(m => m.nullable) 如果不是lambda,我知道我能做到: (bool)nullable 但我不确定如何在lambda中执行此操作以消除此错误。我试着去做 CheckBoxFor(m => m.nullable.value) 但
bool?
字段设置了一个CheckBoxFor
,但是它用红色下划线表示:
无法隐式转换布尔?对布尔来说,你缺演员了吗
问题是,这在lambda中:
bool? nullable {get; set;}
CheckBoxFor(m => m.nullable)
如果不是lambda,我知道我能做到:
(bool)nullable
但我不确定如何在lambda中执行此操作以消除此错误。我试着去做
CheckBoxFor(m => m.nullable.value)
但是这似乎没有在控制器中保留它的值,我得到了一个空值。
CheckBoxFor(m=>m.nullable??false)
应该可以实现您的目标。如果值为null
,您实际期望会发生什么?当您编写CheckBoxFor(m=>(bool)m.nullable)
时会发生什么?lambda只是匿名方法。@neontapir我想我试过了,但它不喜欢,让我再试一次。CheckBoxFor(m=>m.nullable??false)
我想CheckBoxFor
需要一个MemberExpression
,这个空的联合显然不是你测试的吗?我认为提供给CheckBoxFor的表达式有特定的要求。MVC将如何将此映射回nullable
属性?它是否对表达式树进行了深入验证?这会导致post上返回的对象中的表达式始终为false吗?我想CheckBoxFor(m=>m.HasValue?m.Value:false)
可能更可取。@heltonbikerm.GetValueOrDefault()
为我们这样做。@Bas,不,我没有测试这个。当我做很多MVC编程时,我习惯用这种方式使用null操作符。你是对的,在某些用例中,它可能不是最好的方法。GetValueOrDefault
是我提到的答案可能重复使用的方法。对于布尔型,这两种方法应该是等效的。