2012-07-18 114 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