Dot-Net

擴展方法是將函式添加到列舉的唯一方法嗎?

  • October 27, 2010

我有一個方向列舉:

Public Enum Direction
   Left
   Right
   Top
   Bottom
End Enum

有時我需要得到相反的結果,所以寫起來看起來不錯:

SomeDirection.Inverse()

但是我不能在列舉上放一個方法!但是,我可以向它添加一個擴展方法(VS2008+)。

在 VB 中,擴展方法必須在 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 中?

最後,我知道我可以編寫一個行為類似於列舉的結構,但這似乎更加倒退。

這確實是向列舉添加(外觀)方法的唯一方法。

請注意,在 C# 中,擴展方法將在靜態類上定義,但這是一個微不足道的區別,主要是命名法之一。

您可以創建一個行為類似於列舉的類,因為它具有靜態只讀屬性,這些屬性返回包含該值的類的實例。

例如,該System.Drawing.Color結構以這種方式工作(儘管內部值不是列舉);它具有像Color.Redand之類的靜態屬性Color.White,以及實例屬性和方法。

引用自:https://stackoverflow.com/questions/4030136