所有枚举值的通用函数委托?

时间:2014-05-16 16:29:14

标签: vb.net enums

考虑以下代码(控制台应用程序,简化测试用例):

Option Strict On

Module Module1

  Enum Enum1
    vDefaultEnum1
  End Enum

  Enum Enum2
    vDefaultEnum2
  End Enum

  Delegate Sub FunctionX(eValue As [Enum])

  Sub Function1(eValue As Enum1)
  End Sub

  Sub Function2(eValue As Enum2)
  End Sub

  Sub Main()
    Dim version As String = "1"
    Dim d As FunctionX
    Select Case version
      Case "1" : d = AddressOf Function1
      Case "2" : d = AddressOf Function2
      Case Else : Throw New NotImplementedException
    End Select
    d.Invoke(Enum1.vDefaultEnum1)
  End Sub

End Module

我收到此错误:

  

Option Strict On不允许缩小方法' Public Sub Function1(eValue As Enum1)'之间的隐式类型转换。并委托'委托子功能X(eValue As System.Enum)'。

我理解这是因为Enum is a supertype用于Enum1Enum2,转换可以正常工作。我试图避免为每个Enum类型创建一个新的委托(每个项目将有约50个)。

在上面的例子中有没有办法实现这个想法?

对于此示例,请假设Function1Function2是另一个我无法访问的程序集的一部分。它们仅因枚举类型参数而不同(使用不同的枚举)。

注意:以上是简化测试用例。在现实生活场景中,函数签名要大得多,对象深埋在10级命名空间内,所以在每个项目中声明大约50个代表看起来很难看。

1 个答案:

答案 0 :(得分:4)

也许通用代表为您提供了更明智的选择:

Delegate Sub FunctionX(Of T)(eValue As T)