Я считаю, что каждый знает предложение if с 'или' в csharp:

bool bananaIsYellow = true;
bool bananaIsBrown = false;
if (bananaIsYellow || bananaIsBrown) bool bananaIsRipe = true;

Дело в том, что это может очень быстро стать беспорядочным, как только вы начнете сравнивать строки:

string bananaColor = yellow;
if (bananaColor == "yellow" || 
    bananaColor == "brown" ||
    bananaColor == "blue")
{
    bool bananaIsRipe = true;
}

Есть ли способ сократить это?

Единственный способ узнать это (что явно не красивее и не короче):

string bananacolor = "yellow";
if (StringComparer(bananacolor, new string[] { "yellow", "brown", "blue" })) { bool bananaIsRipe = true; }
}
private static bool StringComparer(string source, string[] values)
{
    foreach (var value in values)
    {
        if (source == value) return true;
    }
    return false;
}
0
julian bechtold 25 Сен 2018 в 16:13

2 ответа

Лучший ответ

Вы можете использовать коллекцию и Enumerable.Contains:

string[] ripeColors = { "yellow", "brown", "blue" };
bool isBananaRipe = ripeColors.Contains(bananacolor);

Если вы хотите сравнивать без учета регистра:

bool isBananaRipe = ripeColors.Contains(bananacolor, StringComparer.InvariantCultureIgnoreCase);

Кстати, синие бананы спелые? Еа !

6
Tim Schmelter 25 Сен 2018 в 13:15

Одним из вариантов может быть использование регулярного выражения с чередованием:

Regex regex = new Regex(@"^(yellow|brown|blue)$");
string bananaColor = "yellow";
Match match = regex.Match(bananaColor);

if (match.Success)
{
    Console.WriteLine(match.Value);
}

демонстрация

1
Tim Biegeleisen 25 Сен 2018 в 13:16