在 c# 中为函数调用提供切换的最佳方式是什么?类似于它在 C/C++ 中的完成方式。我希望能够在不破坏 API 的情况下添加额外的切换。理想的解决方案需要最少的 LOC。
例如,在 C 中我们可以执行 FILE_OPEN | FILE_READONLY。
你的意思是使用标志枚举?这是一个带有片段的小教程: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");
}
}
虽然您可以使用标志枚举,但我个人发现使用按位运算符进行设置操作有点不干净。你可以使用HashSet<MyEnum>
. 使用 将成员添加到集合中Add
,并使用 测试成员资格Contains
。
但它仍然在呼叫现场造成混乱。这是 C# 与许多其他语言相比较弱的一个领域。理想情况下,应该set
在语言中内置一种类型,支持in
操作员测试成员资格。