.net - 两个成员枚举与 boolean 值

标签 .net enums boolean

这个问题在我脑海里已经有一段时间了,抱歉,如果它看起来很主观。在数据对象的公共(public)属性和构造函数中使用 bool 有一些缺点。以以下代码为例。

使用 boolean :

public class Room
{
    public string Name { get; set; }
    public bool Bookable { get; set; }

    public Room(string name, bool bookable);
}

以及该类的使用

Room r = new Room ("101", true);

这是适当的功能,但是还有另一种方法来实现它:

使用枚举:

public enum BookingStatus
{
    Bookable,
    NotBookable
}

public class Room
{
    public string Name { get; set; }
    public BookingStatus Bookable { get; set; }

    public Room(string name, BookingStatus bookable);
}

以及该类的使用

Room r = new Room ("101", BookingStatus.Bookable);

对我来说,两者在功能上似乎是等效的,但是各自都有一些优点和缺点:

  • 设置属性时,Enum 方法更加详细(您可以仅从代码中推断出枚举的用法)
  • 可以扩展枚举以支持更多状态(对于 API 特别有用)
  • 枚举需要大量输入(尽管大大减少了输入)
  • 枚举不能在条件语句中使用(即 if (r.bookable)),尽管我知道解决这个问题很简单。

我是否遗漏了一些东西,完全偏离了目标?我不知道为什么这让我如此烦恼,也许我太强制症了!

最佳答案

仅仅因为代码的可读性和理解性,我将使用枚举而不是 boolean 值。

对比一下BookingStatus.Bookabletrue,当然阅读BookingStatus.Bookable你会明白更多。

也像 fforw 提到的那样,如果将来您可能需要添加更多选项,枚举会更容易更改。

关于.net - 两个成员枚举与 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686591/

相关文章:

java - 将 MySQL DB 对象与 Java 中的字符串进行比较

.net - 在 .NET 中仅使用几个值解密 RSA 数据

c# - 如何获得图像的分辨率? (JPEG、GIF、PNG、JPG)

c# - 不保存到 HDD 的临时文件

c# - 如何将通用枚举转换为 int?

java - 在 java 属性文件中表示数组的更好方法

c# - 将自定义颜色添加到 Color 结构?

c++ - 从包装类公开内部类的公共(public)枚举

javascript - 通过多个函数返回 boolean 值

r - 更快的替代 `range(which(..))`