Есть ли способ сделать сравнение короче - PullRequest
3 голосов
/ 13 марта 2020

Как я могу сделать это короче?

string veryLongVariableName;

if (veryLongVariableName == "a" || veryLongVariableName == "b" || veryLongVariableName == "c"|| veryLongVariableName == "d"|| veryLongVariableName == "e"|| veryLongVariableName == "f")

что-то подобное возможно?

if (veryLongVariableName == ("a", "b", "c", "d", "e", "f"))
if (veryLongVariableName == ("a" || "b" || "c" || "d" || "e" || "f"))

Ответы [ 3 ]

6 голосов
/ 13 марта 2020

Вы почти имели это

if (new [] {"a", "b", "c", "d", "e", "f"}.Contains(veryLongVariableName))

Примечание : Это выделяет каждый раз, когда вы звоните это

2 голосов
/ 13 марта 2020

С риском сделать вашу длинную линию длиннее, я бы, вероятно, go с switch здесь:

switch (veryLongVariableName)
{
    case "a:
    case "b:
    case "c:
    case "d:
    case "e:
    case "f:
        // your stuff 
        break;
}

(возможно, с утилитой IsSomething(...), которая возвращает true или false при условии и просто if (IsSomething(...)) {...} в показанном коде.

Причины: это ясно, очевидно и эффективно (без распределений; оптимизировано компилятором).

В качестве примера для IsSomething:

static bool IsSomething(string theThing) => theThing switch {
    "a" => true,
    "b" => true,
    "c" => true,
    "d" => true,
    "e" => true,
    "f" => true,
    _ => false,
};
// ...
if (IsSomething(veryLongVariableName)) { ... }
0 голосов
/ 13 марта 2020

Вы можете иметь все свои string условия в List, затем:

var match = myList
    .FirstOrDefault(x => x.Contains(veryLongVariableName));

if(match != null)
    //Do stuff
...