在c#中为函数调用提供切换的最佳方法是什么?类似于在C / C ++中完成的方式。我希望能够在不破坏API的情况下添加其他切换。理想的解决方案需要最少的LOC。
例如,在C中我们可以做FILE_OPEN | FILE_READONLY。
答案 0 :(得分:2)
你的意思是使用Flags Enum?这是一个带有片段的小教程:http://www.dotnetperls.com/enum-flags 例如:
class Program
{
[Flags]
public enum MyFlags
{
Foo = 0x1,
Bar = 0x2,
Baz = 0x4
}
static void Main(string[] args)
{
MyFlags fooBar = MyFlags.Foo | MyFlags.Bar;
if (fooBar.HasFlag(MyFlags.Foo))
Console.WriteLine("Item has Foo flag set");
}
}
答案 1 :(得分:1)
虽然你可以使用标志枚举,但我个人发现使用按位运算符进行集合运算有些不洁净。您可以使用HashSet<MyEnum>
。使用Add
将成员添加到集合中,并使用Contains
测试成员资格。
但它仍然会在通话网站上造成混乱。与许多其他语言相比,这是C#较弱的一个领域。理想情况下,应该在语言中内置set
类型,支持in
运算符来测试成员资格。