2017-09-14 38 views
0

例如,這SecurityProtocol屬性可以使用OR來賦值:迭代收集和使用OR操作分配給每個爲單屬性

System.Net.ServicePointManager.SecurityProtocol = 
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; 

現在,如果我們想通過移動應用程序中的不硬編碼這個任務它將AppSettings作爲逗號分隔的字符串,如"192,768,3072",我們如何將字符串轉換爲枚舉並使用OR運算符將其分配給屬性?

+1

您可以將整數轉換爲枚舉值:var x =(SecurityProtocolType)192;'。此外,你可以一起使用'|'整數,你可以用逗號分割字符串,並且可以用'Int32.Parse()'分析整數。 –

回答

2
[Flags] 
public enum E 
{ 
    Foo = 1 << 2, 
    Bar = 1 << 4, 
    Baz = 1 << 9, 

    Planxty = Foo | Bar | Baz 
} 

...

var s = "16,4,512"; 

E enumresult = 
    // Split string by commas... 
    s.Split(',') 
    // Parse each numeric substring in turn and cast the result to the enum type... 
    .Select(nstr => (E)Int32.Parse(nstr)) 
    // bitwise or each succeeding value against the rest 
    .Aggregate((a, b) => a | b); 

您可以直接轉換爲一個枚舉值的整數,它是該枚舉類型的有效值。這可以正常工作:

var x = (E)(4 | 512); 
+1

我可能在'Select'或可能'Aggregate '中轉換爲返回正確的類型:'(「192,768,3072」)。Split(',')。Select(x =>(System.Net.SecurityProtocolType)int .Parse(x))。Aggregate((x,y)=> x | y)' – BurnsBA

+0

謝謝。這是我第一次在枚舉上進行位操作。 – DanElliott

0

您可以用逗號分開,並在循環中分析得到的值數組您從拆分得到應用|

string v = "192,768,3072"; 
string[] vals = v.Split(','); 
var result = (SecurityProtocolType)int.Parse(vals[0]); 
for (int i = 1; i < vals.Length; i++) 
    result = result | (SecurityProtocolType)int.Parse(vals[i]); 

這裏是DEMO

你可以爲它創建一個功能像」

public static SecurityProtocolType GetProtocolType(string v) 
{ 
    string[] vals = v.Split(','); 
    var result = (SecurityProtocolType)int.Parse(vals[0]); 
    for (int i = 1; i < vals.Length; i++) 
    result = result | (SecurityProtocolType)int.Parse(vals[i]); 
    return result; 
} 

,並用它喜歡:

GetProtocolType("192,3072"); 

DEMO

相關問題