我希望用户插入一个字符串作为参数,然后检查该字符串是否等于几个字符串之一。
我现在做的方式是
....
if(stringParam != "text1" || stringParam != "text2" || stringParam != "text3"... stringParam != "text10")
....
有没有办法写出更具可读性/更漂亮的东西?可能有,但我找不到办法。
此外,字符串是大写还是小写也没关系。
答案 0 :(得分:4)
您可以使用Hashtable,Dictionary或HashSet。您可以将字符串作为键存储在其中,然后使用ContainsKey()/ Contains()方法查看stringParam是否与先前存储的任何键(“ text1”,“ text2”等)匹配。
HashSet<string> mySet = new HashSet<string>();
mySet.Add("text1");
mySet.Add("text2");
mySet.Add("text3");
mySet.Add("text4");
if (mySet.Contains(stringParam))
Console.WriteLine("It matched");
答案 1 :(得分:0)
您可以将regex匹配使用一个单独的替代项:
Regex regex = new Regex(@"\b(?:text1|text2|text3|...|text10)\b");
string stringParam = "passes";
Match match = regex.Match(stringParam);
if (!match.Success)
{
Console.WriteLine("MATCH");
}
答案 2 :(得分:0)
您可以尝试以下方法:
// build a string array containing what you want to match.
var myStrings = new [] { "TEXT1", "TEXT2", "TEXT3", ....... };
// search in it
if (myStrings.Contains(stringParam.ToUpper()))
{
// yes
}
您也可以使用HashSet<T>
。
但是这种“气味”就像您在做可以通过其他方式更有效地完成的工作一样,但是我们缺少信息。
就像Fildor所说的那样,您可能要使用这个。
// build a string array containing what you want to match.
var myStrings = new [] { "TEXT1", "TEXT2", "TEXT3", ....... };
// search in it
if (myStrings.Any(s => String.Compare(s, stringParam, CultureInfo.InvariantCulture, CompareOptions.IgnoreNonSpace))
{
// yes
}