【问题标题】:Extension methods on Enum - unable to expose methods on the Enum itselfEnum 上的扩展方法 - 无法在 Enum 本身上公开方法
【发布时间】:2010-11-02 11:47:54
【问题描述】:

考虑这个枚举:

enum State
{
    On,
    Off
}

...还有这个扩展方法:

public static void Foo(this Enum e)
{
    // Here be dragons...
}

如果我想调用 Foo(),我必须在 Enum 的属性之一上调用它:State.On.Foo()...我不能在 Enum 本身上调用它:@987654324 @。

这是为什么?我需要做什么,才能在 Enum 本身上调用 Foo()

【问题讨论】:

    标签: c# enums extension-methods


    【解决方案1】:

    如果您尝试调用State.Foo(),那是在尝试调用Foo 上的静态 方法。扩展方法扩展了一个类型的instances。它们就像为该类型添加实例方法,但无法添加任何状态。

    举个例子说明为什么这不起作用,你希望这段代码做什么?

    int count = IEnumerable<string>.Count();
    

    您不能伪造将 static 方法添加到类型。这不是扩展方法支持的东西。

    【讨论】:

    • 我可以在 Enum.Format()、Enum.GetName() 等旁边添加 Foo() 吗?
    • @roosteronacid:不,这些是静态方法。您不能伪造将静态方法添加到类型。
    • @roosterronacid 嗨,不要认为你可以。正如 Jon 所说,扩展方法用于对象的实例。有关如何解决此问题的一些示例,您可以查看例如extensionmethod.net/Details.aspx?ID=255 我不太确定这样做是否真的会为您提供看起来更好或更易于维护的代码,但无论如何您都可以查看代码示例。
    【解决方案2】:

    这是因为扩展方法只能在 instance 上调用,而不能在 class 上调用。它们只是静态方法的语法糖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 2012-04-20
      • 2017-01-11
      • 1970-01-01
      相关资源
      最近更新 更多