C# - 将一个字符串变量与多个其他字符串进行比较(String.Equals)
问题描述:
您有避免执行多个String.Equals的想法吗? 例如:C# - 将一个字符串变量与多个其他字符串进行比较(String.Equals)
if (interSubDir.Equals("de") || interSubDir.Equals("de-DE"))
谢谢!
答
创造价值的集合:
string[] values = { "de", "de-DE" };
使用Contains
方法:
if (values.Contains(interSubDir))
它提供了O(n)性能。
如果您的收藏非常大,那么您可以使用Array.BinarySearch
方法,即为您提供O(log n)性能。
if (Array.BinarySearch(values, interSubDir) >= 0)
但是,该集合必须先排序。
Array.Sort(values);
答
Linq可以帮你。 listToChechAgainst
可能是简单的变量或私人/公共财产。如下
public static class StringExt
{
public static bool EqualsAnyOf(this string value, params string[] targets)
{
return targets.Any(target => target.Equals(value));
}
}
,您可以使用:
var listToChechAgainst = new[] { "de", "DE-de" };
if(listToChechAgainst.Any(x => innerSubDir.Equals(x)));
答
如果你只是想使其更具可读性,或者需要较少的打字,你可以写一个字符串扩展方法,像这样
if (interSubDir.EqualsAnyOf("de", "de-DE"))
或者
if (interSubDir.EqualsAnyOf("de", "de-DE", "en", "en-GB", "en-US"))
等。
您可以创建一个字符串文字集合并检查该集合是否包含'interSubDir'。 – David
您将不得不在每个目标点进行比较,无论是循环还是单独。你只是想让它更具可读性吗? –
通常,当你检查X是否等于A,B,C,D等时,你必须检查每一个。没有真正的捷径。有时候,你可以把事情组合成一个数组,并使用'Any'来执行检查,但是如果你所做的取决于你正在检查的内容,那对你无能为力。 – Will