每次我写一个带有表示选项的布尔参数的方法时,我发现自己在想:"我应该用枚举来替换它,这会使读取方法调用变得更容易吗?".
考虑以下一个对象,它接受一个参数来判断实现是否应该使用它的线程安全版本(我不是在这里问这样做这样做是不是好的设计,只是使用了布尔值):
public void CreateSomeObject(bool makeThreadSafe);
CreateSomeObject(true);
Run Code Online (Sandbox Code Playgroud)
当调用在声明旁边时,参数的目的当然显而易见.当它在一些你几乎不知道的第三方库中时,很难立即看到代码的作用,相比之下:
public enum CreationOptions { None, MakeThreadSafe }
public void CreateSomeObject(CreationOptions options);
CreateSomeObject(CreationOptions.MakeThreadSafe);
Run Code Online (Sandbox Code Playgroud)
它更好地描述了意图.
当有两个表示选项的布尔参数时,情况变得更糟.看看ObjectContext.SaveChanges(bool)Framework 3.5和4.0之间发生了什么.它已被淘汰,因为已经引入了第二个选项,并且整个事物已经转换为枚举.
虽然在有三个或更多元素的情况下使用枚举似乎很明显,但在这些特定情况下,您对使用枚举而不是布尔值有什么看法和经验?
.NET 4.0可能对此有所帮助.您可以使用命名参数:
CreateSomeObject(makeThreadSafe : true);
Run Code Online (Sandbox Code Playgroud)
对于旧版本,改为创建临时变量会很有用.
bool makeThreadSafe = true;
CreateSomeObject(makeThreadSafe);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
548 次 |
| 最近记录: |