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

C# c中IF子句中OR运算符的较短版本#,c#,if-statement,operator-keyword,C#,If Statement,Operator Keyword,我相信everytone知道csharp中带有“or”的if子句: bool bananaIsYellow = true; bool bananaIsBrown = false; if (bananaIsYellow || bananaIsBrown) bool bananaIsRipe = true; 问题是,一旦您开始比较字符串,就会很快变得非常混乱: string bananaColor = yellow; if (bananaColor == "yellow" || bana

我相信everytone知道csharp中带有“or”的if子句:

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[] ripeColors = { "yellow", "brown", "blue" };
bool isBananaRipe = ripeColors.Contains(bananacolor);
如果要以不区分大小写的方式进行比较:

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

顺便问一下,蓝香蕉熟了吗?哎哟!

一个选项可能是使用带有替换项的正则表达式:

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

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

此外,您不应该使用
==
来比较
字符串。改用
.Equals()
=
只比较引用,而
.Equals()比较值。您可以将比较值添加到数组中,并使用
yourArray.Contains(bananaColor)
。这是您编写代码时的首选项。
switch case
block可能看起来不太像视觉污染?@Tau你脑子里可能有Java。在.Net中,字符串的==运算符重载了一个.Equals调用。可能是Tims之战的副本,两个都有听起来像德语的姓:-)是的,我来自德国,但Biegeleisen听起来像是一个有德国祖先的美国人(可能来自于Bügeleisen=flat iron):说实话,很难决定给谁学分,两个答案都是正确的。虽然我可以将Tim Schmelters的答案与其他变量类型一起使用,这也是他为什么要这么做的原因。@Tim Schmelter你在brother上是正确的,事实上,当这些祖先到达埃利斯岛时,Bügeleisen->Biegeleisen的转变发生了。@Julian Bechtold,尽管这两个答案都有效。我也会考虑每一个的可读性和速度。对一些人来说,正则表达式更难阅读和维护。但是,在许多可能的值的情况下,它可能更快。值得思考。从没见过蓝香蕉吗D
Regex regex = new Regex(@"^(yellow|brown|blue)$");
string bananaColor = "yellow";
Match match = regex.Match(bananaColor);

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