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

我有这个:

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。

你可以使用像array和Enumerable.Contains这样的集合:

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

字符串扩展的完美情况

将其添加到新文件中

 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 

你可以做…

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

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

 string[] validInput = new string[] { "STOP", "END", "NO", "YES" }; // input is the input you have if (validInput.Contains(input.Text.ToUpper())) { // Do something } 

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

 var myStringArray= new[]{ "STOP", "END", "NO", "YES" }; var query = myString.Any(x => myStringArray.Contains(x)); 

创建扩展:

 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")) 
  var tasks = new List { "STOP", "END", "NO", "YES" }; tasks.Contains(input.Text.ToUpper()); 

看起来更好

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