所以,我只是讨厌使用true
/false
作为“enabled”/“disabled”的方法参数。随意引用杰夫的话:“我从根本上不喜欢它”。
我反复发现自己在各地的不同命名空间中为每个新项目定义自己的枚举,如下所示:
public enum Clickability
{
Disabled,
Enabled
}
public enum Editability
{
Disabled,
Enabled
}
public enum Serializability
{
Disabled,
Enabled
}
是否有可用于这些场景的通用枚举?
最佳答案
这样做的问题是,它实际上并没有帮助真正有问题的情况,即当有多个参数并且不清楚“标志”在控制什么时。
如果您遵循应“避免双重否定”的规则,那么简单的单个 bool 值就可以了:
public static void Foo(bool useBaz)
public static void Foo(Ability useBaz)
然后 Foo(true)
,与 Foo(Ability.Enabled)
和 Foo(false)
相比,与 Foo(Ability .Disabled)
对大多数人来说真的很明显。
但是,当您使用如下方法时:
public static void Foo(
bool useBaz,
bool barIsHigh,
bool useFlibble,
bool ignoreCase)
那么无论您使用 bool 值还是一般枚举都无关紧要,它们在调用站点上仍然看起来像这样:
Foo(false,true,false,false);
Foo(Ability.Enabled,Ability.Enabled,Ability.Disabled,Ability.Enabled);
两者都不漂亮。
对手头的案例使用特定枚举:
enum BarOption { Off, On }
enum BazConsidered { Low, High }
enum FlibbleOption { Off, On }
// for case sensitivity use System.StringComparison
然后你得到
Foo(Bar.On,
BazConsidered.Low,
FlibbleOption.On,
StringComparison.IgnoreCase );
或者,如果所有都是简单的 bool 状态并且可能保持这种状态,那么使用 Flagged 枚举更好。
[Flags]
enum FooOptions
{
None = 0,
UseBaz = 1,
BazConsideredHigh = 2,
UseFlibble = 4,
}
那么你会:
Foo(FooOptions.UseBar | FooOptions.UseFlibble, StringComparison.IgnoreCase);
Appropriate selection of the 'active' flags so that you specify only what is uncommon will then lead to highlighting 'uncommon' usages.
关于c# - BCL 中的任何地方是否有一个(隐藏得很好的)通用枚举用于启用/禁用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1304794/