C# - 将一个字符串变量与多个其他字符串进行比较 (String.Equals)
C# - Compare one string variables to multiple other string (String.Equals)
您有什么想法可以避免多次 String.Equals 吗?
例如:
if (interSubDir.Equals("de") || interSubDir.Equals("de-DE"))
谢谢!
Linq 可以为您提供帮助。 listToChechAgainst
可以是简单变量或 private/public 属性.
var listToChechAgainst = new[] { "de", "DE-de" };
if(listToChechAgainst.Any(x => innerSubDir.Equals(x)));
如果您只是想让它更具可读性,或者需要更少的输入,您可以像这样编写一个字符串扩展方法:
public static class StringExt
{
public static bool EqualsAnyOf(this string value, params string[] targets)
{
return targets.Any(target => target.Equals(value));
}
}
您可以按如下方式使用:
if (interSubDir.EqualsAnyOf("de", "de-DE"))
或者
if (interSubDir.EqualsAnyOf("de", "de-DE", "en", "en-GB", "en-US"))
等等。
创建 collection 个值:
string[] values = { "de", "de-DE" };
使用Contains
方法:
if (values.Contains(interSubDir))
它提供了 O(n) 的性能。
如果你的 collection 非常大,那么你可以使用 Array.BinarySearch
方法,这会给你 O(log n) 性能。
if (Array.BinarySearch(values, interSubDir) >= 0)
但是,collection必须先排序。
Array.Sort(values);
您有什么想法可以避免多次 String.Equals 吗? 例如:
if (interSubDir.Equals("de") || interSubDir.Equals("de-DE"))
谢谢!
Linq 可以为您提供帮助。 listToChechAgainst
可以是简单变量或 private/public 属性.
var listToChechAgainst = new[] { "de", "DE-de" };
if(listToChechAgainst.Any(x => innerSubDir.Equals(x)));
如果您只是想让它更具可读性,或者需要更少的输入,您可以像这样编写一个字符串扩展方法:
public static class StringExt
{
public static bool EqualsAnyOf(this string value, params string[] targets)
{
return targets.Any(target => target.Equals(value));
}
}
您可以按如下方式使用:
if (interSubDir.EqualsAnyOf("de", "de-DE"))
或者
if (interSubDir.EqualsAnyOf("de", "de-DE", "en", "en-GB", "en-US"))
等等。
创建 collection 个值:
string[] values = { "de", "de-DE" };
使用Contains
方法:
if (values.Contains(interSubDir))
它提供了 O(n) 的性能。
如果你的 collection 非常大,那么你可以使用 Array.BinarySearch
方法,这会给你 O(log n) 性能。
if (Array.BinarySearch(values, interSubDir) >= 0)
但是,collection必须先排序。
Array.Sort(values);