0

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

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

4

2 回答 2

2

你的意思是使用标志枚举?这是一个带有片段的小教程: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");
    }
}
于 2013-01-16T13:50:33.793 回答
1

虽然您可以使用标志枚举,但我个人发现使用按位运算符进行设置操作有点不干净。你可以使用HashSet<MyEnum>. 使用 将成员添加到集合中Add,并使用 测试成员资格Contains

但它仍然在呼叫现场造成混乱。这是 C# 与许多其他语言相比较弱的一个领域。理想情况下,应该set在语言中内置一种类型,支持in操作员测试成员资格。

于 2013-01-16T13:50:47.750 回答