这个问题在我脑海中已经存在一段时间了,如果它看起来很主观,对不起。在公共属性和数据对象的构造函数中使用bool存在一些缺点。考虑以下代码作为例子。
使用bool:
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);
在我看来,这两种方法在功能上看起来是等效的,但是每种方法都有一些优势和缺点:
- 当设置属性时,枚举方法更冗长(你可以从代码中推断出枚举的使用)
- 枚举可以扩展以支持进一步的状态(特别适用于API)
- 枚举需要大量的输入(尽管可以大大减少这个数量)
- 枚举不能在条件语句中使用(例如if (r.bookable)),尽管我认识到这很容易解决。
我是否漏掉了什么,完全不对吗?我不确定为什么这让我如此烦恼,也许是因为我太过于强迫症了!