这是ExtensionMethod的好用吗?

Pat*_*lug 10 c# extension-methods

我只是写了一句if语句

if (value == value1 || value == value2 || value == value3 || value == value4)
    //do something
Run Code Online (Sandbox Code Playgroud)

令我很生气的是,我总是要重复'value =='部分.在我看来,除了难以阅读之外,这没有其他目的.

我编写了以下ExtensionMethod,它应该使上面的场景更具可读性:

public static bool IsEqualToAny<T>(this T value, params T[] objects)
{
    return objects.Contains(value);
}
Run Code Online (Sandbox Code Playgroud)

现在我可以简单地写

if (value.IsEqualToAny(value1, value2, value3, value4))
    //do something
Run Code Online (Sandbox Code Playgroud)

这是ExtensionMethod的一个很好的用法吗?

编辑:

感谢所有的好答案.记录:我保留了方法.虽然您可以简单地使用的建议new []{value1,value2,value3,value4}.Contains(value)是正确的,但我只是更喜欢从左到右读取这种if语句(如果此值等于其中任何一个而不是这些值包含此值).在每个对象的intellisense中显示另一个方法对我来说不是问题.

Mar*_*ell 5

为不受限制的内容编写扩展方法是不常见的T.尤其是,这种方法很快就会使你的智能感知很难使用.

虽然有效,但我可能会将其作为扩展方法避免使用 - 也许只是使用标准的静态实用程序方法.

C#3数组初始化器语法可能更容易?

bool isTrue = new[] { 1, 2, 3 }.Contains(3);
Run Code Online (Sandbox Code Playgroud)

当然,对于大型数据集,您可能希望缓存HashSet<T>某个地方;-p


Pet*_*ris 4

您还没有添加仅对特定应用程序或上下文有用的功能,您的扩展已明确命名,并且行为很明显,而无需查看实现。

答案是“是的,是的”