我有一个字符串数组,我想知道该数组是否包含某个字符串。我可以将not运算符(!)与Contains方法结合使用,如下所示:
if (!stringArray.Contains(searchString))
{
//do something
}
扫描代码时可能会忽略not运算符(!),因此我想知道创建Extension方法是否被认为是不好的做法,以提高可读性:
public static bool DoesNotContain<T>(this IEnumerable<T> source, T value)
{
return !source.Contains<T>(value);
}
所以现在代码可以读取:
if (stringArray.DoesNotContain(searchString))
{
//do something
}
这种事情不受欢迎吗?
答案 0 :(得分:4)
就个人而言,我不会为这么简单的事情做出扩展方法。我知道你试图保持它的可读性,但大多数C#开发人员应该抓住它!运营商。它被大量使用,甚至初学者通常都会认出它。
答案 1 :(得分:3)
似乎没必要,!source.Contains<T>(value);
非常易读。此外,使用现有的Contains
函数意味着您的代码将更具可移植性(即,它不依赖于您的扩展方法存在)。
答案 2 :(得分:3)
我肯定会使用!stringArray.Contains(string)
。这是99.9%的开发人员使用的。 DoesNotContain
至少会让我感到困惑。
答案 3 :(得分:3)
保持!这是该行上方的评论有助于提高可读性的地方 (我怀疑!效率更高)
//If the word is NOT in the array then...
另一点是你是否在使用数组时死定?
有些东西(您可能知道或可能不知道)称为HashSet
。
如果您的唯一目的是检查字符串是否在列表中,那么您实际上是在查看集算术。
除非您将数组用于查找是否包含某个术语以外的其他内容,否则请尝试使用HashSet
...更快。
答案 4 :(得分:3)
我认为你的问题是基于一个错误的前提。也就是说,开发人员将阅读代码中的!
。 !
布尔运算符是众多流行编程语言(C,C ++,C#,Java等)中众所周知的运算符。任何有可能定期阅读!
的人都可能不会在没有经过大量审核的情况下检查代码。
感觉就像你说的那样
我希望人们使用C#进行编码,但我不相信他们会阅读它,因此我将使用扩展方法在我的代码库中创建一个新的方言。
为什么要停留!
运算符?他们似乎很可能会错过+
表达式中的+=
或将|
作为||
阅读。
答案 5 :(得分:2)
在.NET框架中从未见过DoesNot *方法,所以我认为你的问题!被高估了。
答案 6 :(得分:2)
我想这不仅仅是一种好/坏的做法,而是一种个人选择。 IMO我喜欢扩展方法,因为它更具说明性,因此更具可读性,乍一看你确切知道它的作用。只差我2美分
答案 7 :(得分:2)
这听起来不错,现在代码的消费者必须知道两种方法(DoesNotContain
和Contains
)而不是一种方法。一般来说,我会避免使用XXNotXX方法。
答案 8 :(得分:1)
如果我要在项目中经常使用它,我个人会为此做一个扩展方法。如果它是一个关闭然后我不会打扰,但它不是非常糟糕的做法。
我之所以这样做,是因为if()有更多的上下文,一目了然。好的,任何有脑细胞的人都会知道当前的声明在做什么,但它只是读得更好。每个人都会有自己的偏好......
我为格式化字符串做了一个扩展方法,只是为了让代码更好......
答案 9 :(得分:1)
当!something
无效时,请回到something == false
。
答案 10 :(得分:1)
我更喜欢选项1而非选项2.扩展方法非常酷,非常适合用于频繁使用的转换或比较。但是,Microsoft建议谨慎使用扩展方法。
答案 11 :(得分:1)
我真的会考虑扩展方法,除了将表达式否定为不良做法之外别无其他。
怎么样:
if (stringArray.Contains(searchString) == false)
{
//do something
}