“c like”用于函数参数的按位或关闭api切换

时间:2013-01-16 13:47:09

标签: c# api

在c#中为函数调用提供切换的最佳方法是什么?类似于在C / C ++中完成的方式。我希望能够在不破坏API的情况下添加其他切换。理想的解决方案需要最少的LOC。

例如,在C中我们可以做FILE_OPEN | FILE_READONLY。

2 个答案:

答案 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运算符来测试成员资格。