具有可为null布尔的三值逻辑

本文关键字:布尔 null | 更新日期: 2023-09-27 18:27:30

我可以很容易地控制在开始时什么都不选择,用户决定设置。总而言之,这是三值逻辑的标准示例。

所以我的第一个想法是采取可以为null的bool来坚持下去。通常情况下,这会导致我遇到一些烦人的if (var == null) { ... }(或类似的东西)。

转念一想,我想到了Enums。

public enum Selection
{
   Yes,
   No,
   NotChoosenYet
}

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

总而言之,我倾向于选择"枚举方式",因为它更可读。我找了SO一段时间,但找不到一个能让我提前一个月的问题。

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

具有可为null布尔的三值逻辑

我会坚持使用简体中文。

我脑海中浮现的三个原因:

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

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

NULL、Yes或No。

从空类型(C#编程指南)

可为null的类型是可为null结构的实例。可为null的类型可以表示其基础值的正确值范围类型,再加上一个额外的null值。例如Nullable,发音为"Nullable of Int32",可以从-2147483648到2147483647,或者可以为其分配空值。可以为Nullable赋值true、false或null为数值和布尔类型指定null的能力尤其重要在处理数据库和其他数据类型时非常有用包含可能未赋值的元素。例如数据库中的布尔字段可以存储值true或false,或者可能未定义

同样来自使用可为null的类型(C#编程指南)

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

我会模仿它在数据库中的存储方式。如果在db中为null、true和false,那么在c代码中使用null、yes、no。它是未决定的,是,否在数据库中,然后使用c代码中的枚举。只是因为这对下一个人来说会更容易。

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