4

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

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

第二个想法让我想到了枚举。

public enum Selection
{
   Yes,
   No,
   NotChoosenYet
}

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

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

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

4

3 回答 3

3

我会坚持使用 ENUMS。

我马上想到的三个原因:

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

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

NULL、Yes 或 No。

来自Nullable 类型(C# 编程指南)

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

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

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

于 2013-08-13T07:45:47.910 回答
1

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

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

于 2013-08-13T07:55:37.943 回答