如何让你的头发更短
本文关键字:头发 | 更新日期: 2023-09-27 18:07:13
我明白,当使用Regex时,我可以输入值|
来搜索许多值。例如:
Regex sabrina = new Regex("Rihanna|rihanna|Sabrina|sabrina");
我有一个字符串,我想与其他值进行比较,所以我使用if
这样:
if (rihanna == "Rihanna" || rihanna == "sabrina")
我的问题是,如果有可能使if
短?我知道这段代码不工作,但我正在寻找这样的东西:
if (rihanna == "Rihanna|sabrina")
单行解:
if("Rihanna|rihanna|Sabrina|sabrina".Split(new[] {'|'}).Contains(rihanna))
或不含String.Split
方法用法:
if ((new[] { "Rihanna", "rihanna", "Sabrina", "sabrina" }).Contains(rihanna))
如果这种检查执行了不止一次,您应该将string[]
可能的值数组保存到一个变量中:
var names = new[] { "Rihanna", "rihanna", "Sabrina", "sabrina" };
if(names.Contains(rihanna))
您可以使用List<string>
和Enumerable.Contains
方法。
的例子:
var values = new List<string> { "Rihanna", "rihanna", "Sabrina", "sabrina" };
if (values.Contains(rihanna))
{
// etc.
}
if
语句现在更加简洁,您可以快速轻松地向列表添加更多项目。如果您经常执行此操作,则应该将列表的声明移到包含类中的成员变量中,这样就不会在每次调用此方法时产生列表初始化的开销。
一个更好的解决方案是使用Enumerable.Any
和String.Equals
执行不区分大小写的比较:
if (values.Any(x => String.Equals(rihanna, x, StringComparison.OrdinalIgnoreCase))
{
// your code here
}
虽然if
语句现在更长了,但解决方案更加健壮。
如果您希望更容易地维护可能很长的候选字符串列表,为什么不使用switch语句呢?从技术上讲,它将是"更长"的字符,但如果你必须修改一些东西,或者提供一些微妙的二次处理,它可以使事情变得容易得多。
作为上述答案的替代方案,也许您可以考虑使用扩展方法:
public static bool EqualsAny(this string input, params string[] values)
{
return values.Any(v => String.Equals(input, v, StringComparison.OrdinalIgnoreCase));
}
使用如下:
if (rihanna.EqualsAny("Rihanna", "Sabrina"))
这将为您提供相当可读/紧凑/简短的if
比较,特别是与这里的一些其他替代方案相比。
调整EqualsAny
检查,如果你想有OrdinalIgnoreCase
或不,或随意添加任何你想要的过载。甚至可以在"Rihanna|Sabrina"中实现整个管道/分裂。
您可以使用自己的Regex,并将其作为单行使用。
if (Regex.Match(rihanna, "Rihanna|rihanna|Sabrina|sabrina").Success)
或者像这样不区分大小写…
if (Regex.Match(rihanna, "rihanna|sabrina", RegexOptions.IgnoreCase).Success){
忽略大小写,它看起来像是您要使用的,并使用String.Compare
:
if(String.Compare(rihanna, "sabrina", StringComparison.OrdinalIgnoreCase) == 0 ||
String.Compare(rihanna, "rihana", StringComparison.OrdinalIgnoreCase) == 0 ) {
// do stuff
}
Dictionary或HashSet(可能对名称进行不区分大小写的检查)是另一种方法,如果您有多个项目并经常重复检查,则可以提供更好的性能。
var listToCheck = new Dictionary<string, string>(
StringComparer.CurrentCultureIgnoreCase) { { "rihanna", null}};
if (listToCheck.ContainsKey("Rihanna")) ....