在c#中爲函數調用提供切換的最佳方式是什麼?類似於在C/C++中的做法。我希望能夠在不破壞API的情況下添加額外的切換。理想的解決方案需要最少的LOC。「c喜歡」按位或'api切換功能參數
例如,在C中我們可以做FILE_OPEN | FILE_READONLY。
在c#中爲函數調用提供切換的最佳方式是什麼?類似於在C/C++中的做法。我希望能夠在不破壞API的情況下添加額外的切換。理想的解決方案需要最少的LOC。「c喜歡」按位或'api切換功能參數
例如,在C中我們可以做FILE_OPEN | FILE_READONLY。
你的意思是使用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");
}
}
希望它有隱含的權力的兩個編號:D –
雖然你可以使用標誌枚舉,我個人覺得,使用按位運算符集合運算是有點不乾淨。您可以使用HashSet<MyEnum>
。使用Add
將成員添加到集合中,並測試Contains
的成員身份。
但它仍然使通話的網站一塌糊塗。這是C#與其他許多語言相比較弱的地方。理想情況下,該語言中應該有一個set
類型,它支持in
運算符來測試成員身份。
我沒有想要做那樣的事情,那就是引入一個動態構造來解決編譯時問題。雖然這是相當強大的。 +1。 –
你的意思是使用Flags Enum? http://www.dotnetperls.com/enum-flags –
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
是的標誌枚舉。發佈答案<3 –