代码之家  ›  专栏  ›  技术社区  ›  Camilo Martin

扩展方法是将函数添加到枚举的唯一方法吗?

  •  8
  • Camilo Martin  · 技术社区  · 14 年前

    我有一个方向枚举:

    Public Enum Direction
        Left
        Right
        Top
        Bottom
    End Enum
    

    有时我需要得到相反的结果,所以写下:

    SomeDirection.Inverse()
    

    但我不能在枚举上放置方法!但是,我可以添加 Extension Method

    在VB中,扩展方法 must be inside Modules . 我真的不太喜欢模块,我正在尝试编写一个(适度)简单的类,我可以在一个文件中共享这个类,以便插入到其他项目中。

    Public Class MyClass
        '...'
    End Class
    
    Public Module Extensions
        <Extension()> _
        Public Function Inverse(ByVal dir As Direction) As Direction
            '...'
        End Function
    End Module
    

    它是有效的,而且“如果它没有坏,不要修理它”,但是我想知道我是否做错了,有一个更好的方法用更少的样板。可能在.NET 4中?

    最后,我知道我可以编写一个行为类似于枚举的结构,但这似乎更向后。

    2 回复  |  直到 14 年前
        1
  •  7
  •   Marc Gravell    14 年前

    这确实是将方法添加(外观)到枚举的唯一方法。

    注意,在C#中,扩展方法将在静态类上定义,但这是一个微不足道的区别,很大程度上是一个命名法。

        2
  •  1
  •   Guffa    14 年前

    这个 System.Drawing.Color 例如,结构以这种方式工作(尽管内部值不是枚举);它具有静态属性,如 Color.Red Color.White