2012-07-18 115 views
0

我想知道什麼可能是最短的linq查詢,而不是跟在if語句之後。如何使用linq將枚舉值與某些枚舉值相匹配

public enum ErrorMessage { Error1=1, Error2=2, Error3=3, Error4=4 } 
ErrorMessage error = ErrorMessage.Error4; 

if (error == ErrorMessage.Error1 || error == ErrorMessage.Error2) 
{ 
    //do something 
} 
+1

爲什麼linq的呢? – dknaack 2012-07-18 06:49:35

回答

1

的LINQ將使這一代碼複雜,你提供 代碼是可讀的,快速的,可維護超過LINQ的將是

+0

謝謝你所有的貢獻者。 – sudhirk 2012-07-18 07:32:10

0

你可以使用

if (new [] {ErrorMessage.Error1, ErrorMessage.Error2}.Contains(error)) 
{ 
    //do something 
} 

var bad_errors = new [] {ErrorMessage.Error1, ErrorMessage.Error2}; 

if (bad_errors.Contains(error)) 
{ 
    //do something 
} 

如果對分機method的單個呼叫是LINQ足夠的話你呢。

我猜大多數C#開發這樣的模式似乎有些奇怪(和它完全就是),但如果你已經要覈對錯誤的動態創建的列表上的工作...

否則,堅持​​


它的實際工作中更好的語言用更少的樣板,如Python,這種模式通常使用,看起來好多了:

if error in (Error1, Error2): 
    # do something 
+0

你實際上可以在C#中使用像'error.In(ErrorMessage.Error1,ErrorMessage.Error2)'這樣的自定義擴展方法來執行清理語句,儘管我不會真的推薦它,原因有很多。 – Polity 2012-07-18 07:28:43