所以我有条件,目前看起来像这样......
if (input.Contains(",") || input.Contains("/") || input.Contains(@"\") || input.Contains("."))
我需要添加一些我想要检查的字符,并且想知道是否有更简洁的语法来完成同样的事情?类似于SQL的IN运算符?
if ( input IN (",", "/", @"\", ....etc ) )
如果没有添加大量代码,任何人都知道有什么很酷的技巧吗?
答案 0 :(得分:27)
考虑使用Regex(指定要在括号中检查的字符 - 请记住其中一些字符必须被转义):
Regex.IsMatch(input, @"[,/]");
或
new[] {",", "/"}.Any(input.Contains)
答案 1 :(得分:8)
这个怎么样?
if(input.IndexOfAny(new char[] { ',', '/', '\\', '.' })>=0)
{
}
答案 2 :(得分:5)
这会赢得最短的胜利吗?
@".,/\".Any(input.Contains)
答案 3 :(得分:4)
"asdfasdf".ContainsAny(".","/","4");
public static bool ContainsAny(this string stringToCheck, params string[] parameters)
{
return parameters.Any(parameter => stringToCheck.Contains(parameter));
}
答案 4 :(得分:3)
你可以使用一些Linq:
if ( ",/\\.".ToCharArray().Any( c => input.Contains( c ) ) )
答案 5 :(得分:3)
你可以使用String.IndexOfAny - 它将扫描字符串中数组中任何一个字符:
if (e.Label.IndexOfAny(new char[]{',', '/', @'\', '.' /* other chars here */}) > -1)
答案 6 :(得分:2)
尝试
If (input.IndexOfAny(new char[] { ',', '/', '\\', '.' }) >= 0) {
...
}
或
If (input.IndexOfAny(@",/\.".ToCharArray()) >= 0) {
...
}
答案 7 :(得分:0)
扩展方法可以使事情看起来干净。看一下以下内容。
public static bool ContainsChar(this string input, params char[] characters)
{
foreach (var character in characters)
{
if (input.Contains(character))
{
return true;
}
}
return false;
}
该方法的参数是可变参数,因此您可以添加任意多个字符,并用逗号分隔。如果您不习惯使用扩展方法,请修改以下内容:
public static bool ContainsChar(string input, params char[] characters)
{
foreach (var character in characters)
{
if (input.Contains(character))
{
return true;
}
}
return false;
}
用法示例如下:
string myString = "this is my string";
//extension
if (myString.ContainsChar('.', '*', '%')) //do something
//static method
if (ContainsChar(myString, '.', '*', '%')) //do something