因为这是我第一次尝试对我来说很有用的扩展方法,所以我只想确保我走了正确的路

 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/

10-10 23:24
查看更多