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。

4

7 回答 7

16

您可以使用像数组和这样的集合Enumerable.Contains

var words = new[]{ "STOP", "END", "NO", "YES" };
if(words.Contains(input.Text.ToUpper()))
{
     // ...      
}
于 2012-08-04T22:43:48.650 回答
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
于 2012-08-04T23:00:46.783 回答
4

你可以做...

if(new[]{ "STOP", "END", "NO", "YES" }.Contains(input.Text.ToUpper()))
于 2012-08-04T22:43:59.553 回答
1

您可以保存可能单词的数组并将其与Contains方法匹配:

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

// input is the input you have
if (validInput.Contains(input.Text.ToUpper()))
{
    // Do something
}
于 2012-08-04T22:44:26.430 回答
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));
于 2012-08-04T22:45:51.503 回答
0

您可以使用 LINQ 来执行此操作。这样,如果您的字符串中同时包含 STOP 和 END,它将同时接收它们:

var myStringArray= new[]{ "STOP", "END", "NO", "YES" };
var query = myString.Any(x => myStringArray.Contains(x));
于 2012-08-04T22:52:11.210 回答
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"))
于 2012-08-04T23:00:12.397 回答