【问题标题】:Three valued logic with nullable bool?具有可为空的布尔值的三值逻辑?
【发布时间】:2013-08-13 07:42:18
【问题描述】:

我有一个简单的控制,在开始时没有选择,用户决定设置 yesno。总而言之,三值逻辑的标准示例。

所以我的第一个想法是采用可为空的布尔值来坚持。通常这会导致我遇到一些烦人的if (var == null) { ... }(或类似的东西)。

第二个想法让我想到了 Enums。

public enum Selection
{
   Yes,
   No,
   NotChoosenYet
}

在我的上下文中,这为布尔转换带来了一些枚举,但这不是一个展示停止器。

总而言之,我倾向于选择“Enum-way”,因为它更具可读性。 我搜索了一段时间,但找不到让我前进的问题。

有没有更好的方法我还没有考虑?也许是一个标准的 .Net-Type 可以让思考更容易?

【问题讨论】:

  • 如果您在使用布尔值等时不对变量使用有意义的名称,那么枚举肯定会更具可读性。但是,无效性检查有什么烦人的?这是标准程序。
  • 那么enumbool? 好多少?无论如何,你会有一些ifs。
  • 我知道很多代码有很多 if (var == null) 检查 self 中的代码变得比应该的更混乱(或更大)。也许这就是我不喜欢 null 的原因。
  • @Micha 然而if (selection == Selection.NotChoosenYet) { ... 更长。而switch 则更加冗长。

标签: c# .net enums logic nullable


【解决方案1】:

我会坚持使用 ENUMS。

我马上想到的三个原因:

  1. 它更具可读性。
  2. 避免空指针和不必要的空检查代码。
  3. 您可以添加另一个选项(例如“稍后再问我”),而无需重构整个源代码。

【讨论】:

  • 在我的(特殊)上下文中,您的论点是最合适的。
【解决方案2】:

我会坚持使用可为空的布尔值,因为这是您在数据库中表示它的方式。

NULL、Yes 或 No。

来自Nullable Types (C# Programming Guide)

Nullable 类型是 Nullable 结构的实例。可空类型 可以代表其基础价值的正确值范围 类型,加上一个额外的空值。例如,一个 Nullable, 发音为“Nullable of Int32”,可以分配任何值 -2147483648 到 2147483647,或者可以分配空值。可以为 Nullable 分配值 true false 或 null。 该 将 null 分配给数字和布尔类型的能力尤其重要 在处理数据库和其他数据类型时很有用 包含可能没有被赋值的元素。例如,一个 数据库中的布尔字段可以存储值 true 或 false,或者它 可能未定义。

同样来自Using Nullable Types (C# Programming Guide)

有关何时可以使用可为空类型的示例,请考虑如何使用可空类型 普通的布尔变量可以有两个值:真和假。那里 没有表示“未定义”的值。在许多编程 应用程序,尤其是数据库交互,可能会出现变量 处于未定义状态。例如,数据库中的一个字段可能包含 值 true 或 false,但它也可能根本不包含任何值。 类似地,可以将引用类型设置为 null 以表示它们 未初始化。

【讨论】:

  • 没问题。最后(在保存到数据库之前)用户必须选择是或否。
  • 感谢您添加 MSDN 信息 (+1)。有趣 - 考虑到那个可为空的布尔值将是“微软选择”。就我而言,我不使用数据库来存储数据,但我会考虑这一点。
【解决方案3】:

我会模仿它在数据库中的存储方式。如果在db中为null,true和false,则在c#-code中使用null,yes,no。尚未决定,是的,在 db 中没有,然后在 c#-code 中使用枚举。只是因为这对下一个人来说会更容易。

如果我在这两者之间进行选择,枚举看起来会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多