因为这是我在我看来,是非常有用的扩展方法的第一次尝试,我只是想确认我要下去右路我的第一个扩展方法,可以写得更好吗?
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);
}
我更喜欢使用PARAMS超过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;
}
}
再次感谢您!
我个人认为,想了解一下您的扩展方法的语法之前,你应该问一个初步的问题:你甚至想这个方法。首先,正如其他人所提到的那样,它只是一个令牌倒置。任何(),其次,在您的使用示例中,您已经采用了一个简单的概念,“这是一个真正的价值”,应该易于阅读和替换它带有一个涉及自定义扩展方法和即时数组的复杂表达式。国际海事组织,这些不必要的复杂性的小点加起来。 – tnyfst 2009-05-22 13:17:39