具有可空博尔的三重逻辑?

时间:2013-08-13 07:42:18

标签: c# .net enums logic nullable

我可以轻松控制在开始时没有选择,用户决定设置。总而言之,三值逻辑的标准示例。

所以我的第一个想法是采取可以考虑的bool来坚持下去。通常情况下,这会让我感到烦恼if (var == null) { ... }(或类似的东西)。

第二个想法把我带到了Enums。

public enum Selection
{
   Yes,
   No,
   NotChoosenYet
}

在我的背景下,这给布尔皈依者带来了一些恩赐,但这不是一个表演者。

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

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

3 个答案:

答案 0 :(得分:4)

我坚持使用ENUMS。

我在一秒钟内想到的三个原因:

  1. 它更具可读性。
  2. 您可以避免使用null poiters和不必要的null-check代码。
  3. 您可以添加其他选项(例如,“稍后询问”),而无需重构整个来源。

答案 1 :(得分:2)

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

NULL,Yes或No。

来自Nullable Types (C# Programming Guide)

  

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

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

  

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

答案 2 :(得分:1)

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

如果我在这两者之间做出选择,那么enum看起来会更好。