【问题标题】:Nullable bool or bool with default value in action?可以为空的布尔值还是具有默认值的布尔值?
【发布时间】:2013-05-09 19:21:12
【问题描述】:

也许是一个小问题,但我很好奇。

偏爱什么?

在控制器动作中,当传递参数时,应该何时以及如何使用它们?

public ActionResult Action(bool aBool = false)

public ActionResult Action(bool? aNullableBool)

我倾向于使用默认值,因为它更清晰,更容易检查,但我想错了吗?

【问题讨论】:

  • 想想你在数据库中的列是否为空。如果是,请使用可为空的
  • 这是第三种投入方式:public ActionResult Action([DefaultValue(false)]bool aBool) :)
  • @Silvermind 是的 :) 哈哈
  • Trevligt att se en until svensk, hallå där.

标签: c# asp.net-mvc nullable default-value


【解决方案1】:

两者不等价。在第一个示例中,调用者必须指定truefalse,如果没有,则使用false

在第二行中,调用者可以提供true,或false,或null。您需要决定如何处理null。这是您可以获得的第三个值。加上调用者不能省略它。他需要传递一个值。

【讨论】:

  • 也许我弄错了,但是如果您在第二个示例中省略该值,它将为空。
  • @Silvermind 不正确,类型是可空的
  • @Silvermind,如果你想这样做,你必须写:public ActionResult Action(bool?aNullableBool = null)
  • @mattytommo 谢谢,我的立场是正确的。我对?aNullableBool=&etc 感到困惑,所以查询字符串中没有值。
  • 我将此作为答案,但通过将@hjalmar-z 添加为默认为空的可空布尔值来添加知识。
【解决方案2】:

可空变量的.HasValue 属性有时会非常方便。拥有一个可以为空的 bool 就像在 bool 中拥有一个 bool。将 Chuong Les example 与数据库一起使用,当您读取一个单元格时,您可能希望在继续之前检查该单元格是否实际包含一个值(并最终出现错误)。

您可以使用一个可为空的变量并使用if (aNullableBool.HasValue) 确保在继续之前您有一个值,而不必在读取单元格之前确保不是这种情况。

也就是说,除非您冒着变量获得值null 的风险,否则您应该使用默认值。

【讨论】:

    【解决方案3】:

    我认为路由配置中的默认值会是最好的。

    【讨论】:

      【解决方案4】:

      这取决于你的布尔值。

      如果你想有一个默认值与否(默认行为+只有一个其他行为),那么这个方法只有2个行为。

      如果您想将第三种行为作为默认行为,则需要使用可为空的 bool。

      因此请考虑您的方法的需求并做出相应的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 1970-01-01
        • 2012-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多