我有一个接受枚举值作为参数的方法,this answer是我的参考。但是我似乎无法使它发挥作用。
枚举
Public Enum FieldTypes
db_Alpha = 0
db_Memo = 1
db_Numeric = 2
End Enum
Public Enum SubTypes
st_None = 0
st_Phone = 35
st_Percentage = 37
st_Address = 63
st_Link = 66
End Enum
的方法
Public Sub Foo(Of T)(ByVal Param1 As String, ByVal EnumParam As T)
Dim param As Type = GetType(T)
If param.IsEnum Then
Dim x = param.GetEnumValues()
End If
'Running some codes here
End Sub
主要
Public Sub Test()
Foo("TestName",FieldTypes.db_Memo)
End Sub
我得到了作为参数传递的Enum类型的所有值。 我想减少方法重载并在这里了解泛型。接受C#和VB.net建议。
答案 0 :(得分:1)
由于Enum
始终是值类型,因此您可以限制您的功能" Foo"只接受价值类型。
Public Sub Foo(Of T As Structure)(ByVal Param1 As String, ByVal EnumParam As T)
您还可以将通用功能限制为仅接受引用类型
Public Sub Test(Of T As Class)(ByVal param As T)
或仅接受实现特定接口的类型
Public Sub Test(Of T As IDispose)(ByVal param As T)
您甚至可以连接这些条件
Public Sub Test(Of T As Class, IDispose, IEnumerable)(ByVal param As T)
你的功能内部" Foo"你可以检查,T是这样的正确类型:
If Not GetType(T).Equals(GetType(FieldTypes)) AndAlso _
Not GetType(T).Equals(GetType(SubTypes)) Then
Throw New Exception("Enum type not supported")
End If
获取" EnumParam"的数值您可以将其转换为Integer
或您的枚举所基于的任何其他数字类型:
Dim x As Integer = Convert.ToInt32(EnumParam)