如何使用linq将枚举值与某些枚举值进行匹配

时间:2012-07-18 06:43:32

标签: linq

我想知道什么是最短的linq查询,而不是跟随if语句。

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

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

2 个答案:

答案 0 :(得分:1)

Linq会让这段代码变得复杂, 您提供的代码比Linq更具可读性,快速性和可维护性

答案 1 :(得分: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#开发人员来说这样的模式看起来很奇怪(而且完全是这样),但是如果你已经在研究一个动态创建的错误列表,你想要检查...

否则,坚持使用if.


它实际上在具有较少样板的语言中更好用,例如Python,这种模式常用,看起来好多了:

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