如何将多个变量与单个条件进行比较?

4

我有如下内容:

if (input.Text.ToUpper() == "STOP")

但是有很多可能的值,我无法像这样单独指定它们:

if (input.Text.ToUpper() == "STOP" || input.Text.ToUpper() == "END")

有没有一种方法可以做到像这样:
if (input.Text.ToUpper() == "STOP", "END", "NO", "YES")

所以使用STOP、END、NO或YES就可以完成任务吗?

使用任何包含的词语都行不通,有时接受的单词中会包含STOP和END。


包含不匹配包含字符串的单词!因此,包含可以工作。 - Emond
7个回答

16

您可以使用类似数组的集合和Enumerable.Contains

var words = new[]{ "STOP", "END", "NO", "YES" };
if(words.Contains(input.Text.ToUpper()))
{
     // ...      
}

5

一个适合使用字符串扩展的完美场景

将此添加到新文件中

namespace appUtils
{
    public static class StringExtensions
    {
        public static bool In(this string s, params string[] values)
        {
            return values.Any(x => x.Equals(s));
        }
    }
}

可以通过以下方式从您的代码中调用:

if(input.Text.In("STOP", "END", "NO", "YES") == true)
   // ... do your stuff

我认为这很理想。我会给你的扩展方法添加一个StringComparison参数,并加入你的Equals检查。 - Jeff Reddy
更好的做法是使用通用的 In 扩展:https://dev59.com/G3VC5IYBdhLWcg3whBaj#833477 - Tim Schmelter

4

您可以做...

if(new[]{ "STOP", "END", "NO", "YES" }.Contains(input.Text.ToUpper()))

1

您可以保存可能的单词数组,并使用Contains方法进行匹配:

string[] validInput = new string[] { "STOP", "END", "NO", "YES" };

// input is the input you have
if (validInput.Contains(input.Text.ToUpper()))
{
    // Do something
}

0
        var tasks = new List<string> { "STOP", "END", "NO", "YES" };
        tasks.Contains(input.Text.ToUpper());

看起来更好

        var tasks = new List<string> { "stop", "end", "no", "yes" };
        tasks.Exists(x => string.Equals(x, input.Text, StringComparison.OrdinalIgnoreCase));

0
你可以使用LINQ来实现这个功能。这样,如果你的字符串中同时包含STOP和END,它都能够识别出来:
var myStringArray= new[]{ "STOP", "END", "NO", "YES" };
var query = myString.Any(x => myStringArray.Contains(x));

0
创建扩展:
public static class Extension
{
    public static bool EqualsAny(this string item, params string[] array)
    {
        return array.Any(s => item.ToUpper() == s.ToUpper());
    }
}

使用:

if (inputText.EqualsAny("STOP", "END", "NO", "YES"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接