我有这个:
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。
答案 0 :(得分:16)
您可以使用数组和Enumerable.Contains
之类的集合:
var words = new[]{ "STOP", "END", "NO", "YES" };
if(words.Contains(input.Text.ToUpper()))
{
// ...
}
答案 1 :(得分: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
答案 2 :(得分:4)
if(new[]{ "STOP", "END", "NO", "YES" }.Contains(input.Text.ToUpper()))
答案 3 :(得分:1)
您可以保存一组可能的单词并将其与Contains
方法匹配:
string[] validInput = new string[] { "STOP", "END", "NO", "YES" };
// input is the input you have
if (validInput.Contains(input.Text.ToUpper()))
{
// Do something
}
答案 4 :(得分: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));
答案 5 :(得分:0)
您可以使用LINQ来执行此操作。这样,如果你的字符串中同时包含STOP和END,它将同时接收它们:
var myStringArray= new[]{ "STOP", "END", "NO", "YES" };
var query = myString.Any(x => myStringArray.Contains(x));
答案 6 :(得分: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"))