因为这是我第一次尝试对我来说很有用的扩展方法,所以我只想确保我走了正确的路
public static bool EqualsAny(this string s, string[] tokens, StringComparison comparisonType)
{
foreach (string token in tokens)
{
if (s.Equals(token, comparisonType))
{
return true;
}
}
return false;
}
致电者
if (queryString["secure"].EqualsAny(new string[] {"true","1"}, StringComparison.InvariantCultureIgnoreCase))
{
parameters.Protocol = Protocol.https;
}
编辑:提出了一些出色的建议,正是我想要的东西。谢谢
编辑:
我已决定以下实现
public static bool EqualsAny(this string s, StringComparison comparisonType, params string[] tokens)
{
// for the scenario it is more suitable for the code to continue
if (s == null) return false;
return tokens.Any(x => s.Equals(x, comparisonType));
}
public static bool EqualsAny(this string s, params string[] tokens)
{
return EqualsAny(s, StringComparison.OrdinalIgnoreCase, tokens);
}
我更喜欢使用参数而不是IEnumerable,因为它简化了调用代码
if (queryString["secure"].EqualsAny("true","1"))
{
parameters.Protocol = Protocol.https;
}
与以前的相去甚远
if (queryString["secure"] != null)
{
if (queryString["secure"] == "true" || queryString["secure"] == "1")
{
parameters.Protocal = Protocal.https;
}
}
再次感谢你!
最佳答案
public static bool EqualsAny(
this string s,
StringComparison comparisonType,
params string[] tokens)
{
foreach (string token in tokens)
{
if (s.Equals(token, comparisonType))
{
return true;
}
}
return false;
}
使用params,您不必先将字符串强制放入数组。
var match = "loool".EqualsAny(StringComparison.Ordinal, "hurf", "Durf");
Linq认证(JC + me),具有NRE(框架标准):
public static bool EqualsAny(
this string s,
StringComparison comparisonType,
params string[] tokens)
{
if(s == null) throw new NullReferenceException("s");
return tokens.Any(x=> s.Equals(x, comparisonType));
}
关于c# - 我的第一个扩展方法,可以写得更好吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/897698/