我只是写了一句if语句
if (value == value1 || value == value2 || value == value3 || value == value4) //do something
令我很生气的是,我总是要重复'value =='部分.在我看来,除了难以阅读之外,这没有其他目的.
我编写了以下ExtensionMethod,它应该使上面的场景更具可读性:
public static bool IsEqualToAny(this T value, params T[] objects) { return objects.Contains(value); }
现在我可以简单地写
if (value.IsEqualToAny(value1, value2, value3, value4)) //do something
这是ExtensionMethod的一个很好的用法吗?
编辑:
感谢所有的好答案.记录:我保留了方法.虽然您可以简单地使用的建议new []{value1,value2,value3,value4}.Contains(value)
是正确的,但我只是更喜欢从左到右读取这种if语句(如果此值等于其中任何一个而不是这些值包含此值).在每个对象的intellisense中显示另一个方法对我来说不是问题.
为不受限制的内容编写扩展方法是不常见的T
.尤其是,这种方法很快就会使你的智能感知很难使用.
虽然有效,但我可能会将其作为扩展方法避免使用 - 也许只是使用标准的静态实用程序方法.
C#3数组初始化器语法可能更容易?
bool isTrue = new[] { 1, 2, 3 }.Contains(3);
当然,对于大型数据集,您可能希望缓存HashSet
某个地方;-p