Нужен лучший способ сравнить несколько значений со свойством и вернуть true - PullRequest
5 голосов
/ 28 января 2012

Я ищу стандартную / лучшую практику для сценариев, где мне нужно проверить одно и то же свойство объекта по списку значений, возвращающих true, если какое-либо из значений соответствует свойству.

В настоящее время код похож на это (я не писал его, я хочу его реорганизовать) ...

if (object.property == "string1"
                    || object.property == "string2"
                    || object.property == "string3"
                        || object.property == "string4"
                        || object.property == "string5"
                                || object.property == "string6"
                                || object.property == "string7"
                                    || object.property == "string8"
                                     || object.property == "string9"
                                        || object.property == "string10"
                                        || object.property == "string11"
                                            || object.property == "string12"
                                            || object.property == "string13"
                                                || object.property == "string14"
                                                || object.property == "string15")

Ответы [ 4 ]

9 голосов
/ 28 января 2012
IEnumerable<string> items = new List<string>{ "string1", "string2" };

bool match = items.Contains(object.property);
4 голосов
/ 28 января 2012

Другие ответы предлагают использовать List<string>, но HashSet<string> лучше подходит для этой задачи:

HashSet<string> set = new HashSet<string>() { "string1", "string2", ..., "string15" }; 

if (set.Contains(object.Property))
    //... do something ...

Или, как предполагает anatoliiG, пусть компилятор справится с этим:

switch (object.property)
{
    case "string1":
    case "string2":
    //...
    case "string15":
       //... do something ...
       break;
}
1 голос
/ 28 января 2012

Вы можете поместить значения в List<string> и затем сделать это:

List<string> values = new List<string>() {"string1", "string2"};

if(values.Contains(object.Property)) return true;
0 голосов
/ 28 января 2012

Вы можете попробовать LINQ для более краткого кода, такого как:

bool match = new string[] { "string1", "string2" }.Any(p => p == object.property);
...