2013-01-16 50 views
0

在c#中爲函數調用提供切換的最佳方式是什麼?類似於在C/C++中的做法。我希望能夠在不破壞API的情況下添加額外的切換。理想的解決方案需要最少的LOC。「c喜歡」按位或'api切換功能參數

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

+2

你的意思是使用Flags Enum? http://www.dotnetperls.com/enum-flags –

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

是的標誌枚舉。發佈答案<3 –

回答

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"); 
    } 
} 
+0

希望它有隱含的權力的兩個編號:D –

1

雖然你可以使用標誌枚舉,我個人覺得,使用按位運算符集合運算是有點不乾淨。您可以使用HashSet<MyEnum>。使用Add將成員添加到集合中,並測試Contains的成員身份。

但它仍然使通話的網站一塌糊塗。這是C#與其他許多語言相比較弱的地方。理想情況下,該語言中應該有一個set類型,它支持in運算符來測試成員身份。

+0

我沒有想要做那樣的事情,那就是引入一個動態構造來解決編譯時問題。雖然這是相當強大的。 +1。 –