gpt4 book ai didi

c# - 我的第一个扩展方法,它能写得更好吗?

转载 作者:太空狗 更新时间:2023-10-29 20:52:32 25 4
gpt4 key购买 nike

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

 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;
}
}

再次感谢!

最佳答案

是的!首先,您需要检查 s 是否为空。另外,让它接受任何 IEnumerable<string>对于 token 而不仅仅是一个数组,然后使用其他 linq 运算符进行检查:

public static bool EqualsAny(this string s, IEnumerable<string> tokens, StringComparison comparisonType)
{
if (s== null) return false;
return tokens.Any(t => s.Equals(t, comparisonType));
}

思考如何处理一个null s 的值,还有第三个选项还没有人用过:

 public static bool EqualsAny(this string s, IEnumerable<string> tokens, StringComparison comparisonType)
{
if (s== null) return tokens.Any(t => t == null);
return tokens.Any(t => s.Equals(t, comparisonType));
}

最后,关于你选择的实现:如果你要有重载,你也可以有 IEnumerable 重载,并有你的 params代码调用那些。

关于c# - 我的第一个扩展方法,它能写得更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/897698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com