例如,我有两种实现,一种带有位标志,另一种带有简单枚举:
1) 位标志
[Flags]
public enum LettersBitFlags
{
A = 1,
B = 2,
C = 4,
D = 8
}
public static bool IsLetterBBitFlags(LettersBitFlags letters)
{
return (letters & LettersBitFlags.B) != 0;
}
2) 简单枚举
public enum Letters
{
A,
B,
C,
D
}
public static bool IsLetterBParams(params Letters[] letters)
{
return letters.Any(x => x == Letters.B);
}
它们显然可以这样使用:
Console.WriteLine(IsLetterBBitFlags(LettersBitFlags.A | LettersBitFlags.D)); //false
Console.WriteLine(IsLetterBBitFlags(LettersBitFlags.B | LettersBitFlags.C)); //true
Console.WriteLine(IsLetterBParams(Letters.A, Letters.D)); //false
Console.WriteLine(IsLetterBParams(Letters.B, Letters.C)); //true
是否有任何实际理由选择其中之一?正如我所看到的,它们给出了相同的结果,但也许某些性能或其他任何东西应该让我使用一个而不使用另一个?
最佳答案
它们有不同的含义。标志的特点是对它们进行“或”运算才有意义;枚举只是离散的数据 block ,它们在幕后是数字的事实只不过是一个实现细节。
如果您使用的标志对于“或”两个组合而言没有意义,那么您将严重误导任何使用您的数据类型的人。相反,如果您在想要标记的地方使用枚举,那么您将必须手动捕获并命名数量呈指数级增长的枚举案例。
关于c# - 在 C# 中是否有任何理由使用枚举参数而不是位标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62117318/