c#中IF子句中更短版本的OR运算符

jul*_*old 0 c# if-statement operator-keyword

我相信每个人都知道在csharp中带有'或'的if子句:

bool bananaIsYellow = true;
bool bananaIsBrown = false;
if (bananaIsYellow || bananaIsBrown) bool bananaIsRipe = true;
Run Code Online (Sandbox Code Playgroud)

事情是,一旦你开始比较字符串,这会变得非常混乱:

string bananaColor = yellow;
if (bananaColor == "yellow" || 
    bananaColor == "brown" ||
    bananaColor == "blue")
{
    bool bananaIsRipe = true;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法缩短这个?

我知道的唯一方法就是这样(显然不是更漂亮或更短):

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;
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 6

您可以使用集合和Enumerable.Contains:

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

如果要以不区分大小写的方式进行比较:

bool isBananaRipe = ripeColors.Contains(bananacolor, StringComparer.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,蓝香蕉成熟了吗?EW!