Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 创建仅将某些类型的枚举作为约束的泛型方法_Vb.net_Generics_Enums - Fatal编程技术网

Vb.net 创建仅将某些类型的枚举作为约束的泛型方法

Vb.net 创建仅将某些类型的枚举作为约束的泛型方法,vb.net,generics,enums,Vb.net,Generics,Enums,关于如何为泛型类型创建枚举约束,存在很多问题,等等 我很好奇是否可以更进一步,只需要某些局部定义的枚举作为泛型方法的约束 目前,我正在使用建议的解决方案,在泛型类型上使用结构、Iconvertible约束来处理泛型类型的枚举。在vb.net中看起来像这样: Private Function MyMethod(Of T As {Structure, IConvertible})(ByVal myEnum As T) As Object '... End Function 现在,如果我想

关于如何为泛型类型创建枚举约束,存在很多问题,等等

我很好奇是否可以更进一步,只需要某些局部定义的枚举作为泛型方法的约束

目前,我正在使用建议的解决方案,在泛型类型上使用结构、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#答案也很受欢迎。

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

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

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

可能还有另一个私有方法为这些函数提供公共实现。

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

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

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

使用另一种私有方法,为这些函数提供公共实现。

即使代码使用少量离散类型,使用泛型也有助于避免重复。例如,可能有一些代码执行一些复杂的计算,并且希望能够对类型为
double
Decimal
(可能还有
float
)的变量执行这些代码。如果
性能计算
有一些静态委托
函数和、差、积、商等,并在内部定义使用这些类型的运算符重载,可以避免编写计算代码的两到三个副本来处理不同的类型。即使代码使用少量离散类型,使用泛型也有助于避免重复。例如,可能有一些代码执行一些复杂的计算,并且希望能够对类型为
double
Decimal
(可能还有
float
)的变量执行这些代码。如果
性能计算
有一些静态委托
函数和、差、积、商等,并在内部定义使用这些运算符重载的运算符重载,可以避免编写计算代码的两到三个副本来处理不同的类型。