【问题标题】:convert nullable bool to regular bool in lambda [duplicate]在lambda中将可为空的布尔转换为常规布尔[重复]
【发布时间】:2015-05-22 16:46:28
【问题描述】:

我在视图中有一个CheckBoxFor 用于bool? 字段,但是它用红色表示:

不能隐式转换布尔值?布尔,你错过了演员表

问题是,这是在 lambda 中:

bool? nullable {get; set;}
CheckBoxFor(m => m.nullable)

如果不是 lambda,我知道我可以做到:

(bool)nullable

但我不确定如何在 lambda 中执行此操作以消除此错误。我试着做

CheckBoxFor(m => m.nullable.value) 

但这似乎并没有在控制器中保留它的值,我得到了一个空值。

【问题讨论】:

  • 如果值为null,您实际期望发生什么?
  • CheckBoxFor(m => (bool)m.nullable)会发生什么? Lambda 只是匿名方法。
  • @neontapir 我想我试过了,但它不喜欢它,让我再试一次。
  • CheckBoxFor(m => m.nullable ?? false)怎么样
  • 我认为CheckBoxFor 需要MemberExpression,而空合并显然不是

标签: c# lambda


【解决方案1】:

CheckBoxFor(m => m.nullable ?? false) 应该可以实现您的目标。

【讨论】:

  • 你测试过这个吗?我认为提供给 CheckBoxFor 的表达式有特定的要求。 MVC 将如何将其映射回nullable 属性?它是否对表达式树进行了深度验证?这会导致 post 上返回的对象中的表达式始终为 false 吗?
  • 我猜CheckBoxFor(m => m.HasValue ? m.Value : false) 可能更好。
  • @heltonbiker m.GetValueOrDefault() 为我们做这件事。
  • @Bas,不,我没有对此进行测试。当我做大量的 MVC 编程时,我曾经以这种方式使用可空运算符。没错,在某些用例中,这可能不是最好的方法。
  • GetValueOrDefault 是我注意到可能重复的答案所使用的方法。对于布尔值,这两种方法应该是等价的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 2014-09-03
  • 2011-01-13
相关资源
最近更新 更多