более короткая версия оператора OR в предложении IF в c # - PullRequest
0 голосов
/ 25 сентября 2018

Я полагаю, что каждый тон знает выражение 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;
}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

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

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

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

Демо

0 голосов
/ 25 сентября 2018

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

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

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

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

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

...