是否有一个函数我可以应用于一个字符串,如果一个字符串包含一个字符,它将返回true的假.
我有一个或多个字符选项的字符串,例如:
var abc = "s";
var def = "aB";
var ghi = "Sj";
Run Code Online (Sandbox Code Playgroud)
例如,我想要做的是有一个函数,如果上面包含一个小写或大写的"s",它将返回true或false.
if (def.Somefunction("s") == true) { }
Run Code Online (Sandbox Code Playgroud)
同样在C#中,我需要检查一下这样的东西是真的还是我可以删除"== true"?
And*_*lad 96
您可以使用.Contains()命名空间System.Linq中的扩展方法:
if (abc.ToLower().Contains('s')) { }
Run Code Online (Sandbox Code Playgroud)
不,要检查布尔表达式是否为真,您不需要 == true
由于该Contains方法是一种扩展方法,我的解决方案似乎让一些人感到困惑.以下是两个版本,不需要您添加using System.Linq;:
if (abc.ToLower().IndexOf('s') != -1) { }
// or:
if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { }
Run Code Online (Sandbox Code Playgroud)
更新
如果您愿意,可以编写自己的扩展方法以便于重用:
public static class MyStringExtensions
{
public static bool ContainsAnyCaseInvariant(this string haystack, char needle)
{
return haystack.IndexOf(needle, StringComparison.InvariantCultureIgnoreCase) != -1;
}
public static bool ContainsAnyCase(this string haystack, char needle)
{
return haystack.IndexOf(needle, StringComparison.CurrentCultureIgnoreCase) != -1;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样调用它:
if (def.ContainsAnyCaseInvariant('s')) { }
// or
if (def.ContainsAnyCase('s')) { }
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,在处理用户数据时,您实际上想要使用CurrentCultureIgnoreCase (或ContainsAnyCase扩展方法),因为这样您就可以让系统处理大小写问题,这取决于语言.在处理计算问题时,比如HTML标记的名称等,您希望使用不变文化.
例如:在土耳其语中,I小写的大写字母是? (没有点),而不是i (带点).
您可以使用该IndexOf方法,该方法具有适合字符串比较类型的重载:
if (def.IndexOf("s", StringComparison.OrdinalIgnoreCase) >= 0) ...
Run Code Online (Sandbox Code Playgroud)
此外,您不需要== true,因为if语句只需要一个计算结果为a的表达式bool.
使用函数 String.Contains();
一个示例调用,
abs.Contains("s"); // to look for lower case s
Run Code Online (Sandbox Code Playgroud)
这里有更多来自 MSDN。