【问题标题】:Create a generic method with only certain types of enum as constraints创建一个只有某些类型的枚举作为约束的泛型方法
【发布时间】:2013-04-02 17:04:28
【问题描述】:

有很多关于如何为泛型类型创建枚举约束的问题。 ex1ex2ex3

我很好奇是否有可能更进一步,只需要某些本地定义的枚举作为通用方法的约束。

目前,我正在使用建议的解决方案,即在泛型类型上使用结构、Iconvertible 约束来处理允许泛型类型的枚举。在 vb.net 中看起来像这样:

Private Function MyMethod(Of T As {Structure, IConvertible})(ByVal myEnum As T) As Object
     '...
End Function

现在,如果我想进一步强制仅对我的两个枚举进行约束,会发生什么情况,定义如下:

Public Enum EnumOne
    Height
End Enum

Public Enum EnumTwo
    Width
End Enum

我还没弄明白语法。

虽然我在 VB.net 中编程,但也欢迎 C# 答案。

【问题讨论】:

    标签: vb.net generics enums


    【解决方案1】:

    不,你不能像那样约束类型参数,这些枚举类型没有任何共同点。只能处理两种类型参数类型的泛型函数没有多大价值,只提供函数的两个非泛型重载要简单得多:

    Private Function MyMethod(ByVal value as EnumOne) As Object
         '' etc
    End Function
    
    Private Function MyMethod(ByVal value as EnumTwo) As Object
         '' etc
    End Function
    

    也许还有另一个私有方法,为这些函数提供通用实现。

    【讨论】:

    • 即使代码使用少量离散类型,使用泛型也有助于避免重复。例如,可能有一些代码执行一些复杂的计算,并希望能够在doubleDecimal(可能还有float)类型的变量上运行它。如果 PerformComputations<T> 有一些静态委托 Func<T,T,T> Sum, Difference, Product, Quotient; 等,并在内部定义了使用这些的运算符重载,则可能避免编写两个或三个计算代码副本来处理不同的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多