具有接受不同类型的枚举值的参数的方法

时间:2018-04-05 10:04:25

标签: c# vb.net generics

我有一个接受枚举值作为参数的方法,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建议。

  1. 我如何获得传递的枚举项的值?
  2. 如何限制,只接受两种类型的Enum?

1 个答案:

答案 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)