如何在VB.Net中为任何类型的枚举数组创建扩展方法

如何在VB.Net中为任何类型的枚举数组创建扩展方法,vb.net,enums,extension-methods,Vb.net,Enums,Extension Methods,下面是我拥有的代码,但该方法在枚举数组上不可用。我不知道我做错了什么。请注意,在枚举数组上使用此方法之前,我无法测试行Array.ConvertAll Public Module EnumExtensions <Extension()> Function ValuesToString(Source As [Enum]()) As String() Dim EnumType = Source.GetType() If Not Enum

下面是我拥有的代码,但该方法在枚举数组上不可用。我不知道我做错了什么。请注意,在枚举数组上使用此方法之前,我无法测试行
Array.ConvertAll

Public Module EnumExtensions

    <Extension()>
    Function ValuesToString(Source As [Enum]()) As String()

        Dim EnumType = Source.GetType()
        If Not EnumType.IsEnum Then Return Nothing

        Return Array.ConvertAll(Source, Function(x) x.ToString)

    End Function

End Module
公共模块枚举扩展
函数值字符串(源为[Enum]())作为字符串()
Dim EnumType=Source.GetType()
如果不是EnumType.IsEnum,则不返回任何内容
返回Array.ConvertAll(源,函数(x)x.ToString)
端函数
端模块

正如我在评论中所说,您可以根据需要调用
Select
ToArray
。但是,如果确实需要扩展,则需要将方法设置为泛型:

<Extension>
Public Function ToStrings(Of T)(source As T()) As String()
    'If Not GetType(T).IsEnum Then
    '    Return Nothing
    'End If

    Return Array.ConvertAll(source, Function(e) e.ToString())
End Function

公共函数toString(Of T)(源代码为T())作为字符串()
'如果不是GetType(T).IsEnum,则
“什么也不归还
"完"
返回Array.ConvertAll(源,函数(e)e.ToString())
端函数

没有通用约束可以限制仅对
Enum
值数组调用该方法,因此您可以使用
If
语句返回
Nothing
或引发异常。不过,我不太明白这一点,因为如果您允许在任何其他类型的另一个数组上调用相同的方法,也不会有什么坏处。

正如我在评论中所说,您可以根据需要调用
Select
ToArray
。但是,如果确实需要扩展,则需要将方法设置为泛型:

<Extension>
Public Function ToStrings(Of T)(source As T()) As String()
    'If Not GetType(T).IsEnum Then
    '    Return Nothing
    'End If

    Return Array.ConvertAll(source, Function(e) e.ToString())
End Function

公共函数toString(Of T)(源代码为T())作为字符串()
'如果不是GetType(T).IsEnum,则
“什么也不归还
"完"
返回Array.ConvertAll(源,函数(e)e.ToString())
端函数

没有通用约束可以限制仅对
Enum
值数组调用该方法,因此您可以使用
If
语句返回
Nothing
或引发异常。不过,我不太明白这一点,因为如果允许在任何其他类型的另一个数组上调用同一个方法,也不会有什么坏处。

使用
enum
数组做什么?还可以查看
I可转换
…我需要
enum
数组值作为字符串数组。如果您要做的只是调用
array.ConvertAll
,那么为什么您需要将其限制为一个
enum
?我的目标是将
enum
值数组转换为字符串数组。我不知道
Array.ConvertAll
是否是最好的方法。我还没有测试这段代码,它可能会给我一个整数数组,而不是文本表示。你有什么建议吗?你可以调用myArray.Select(函数(e)e.ToString()).ToArray()。这将适用于任何数组。您如何处理
enum
数组?还可以查看
I可转换
…我需要
enum
数组值作为字符串数组。如果您要做的只是调用
array.ConvertAll
,那么为什么您需要将其限制为一个
enum
?我的目标是将
enum
值数组转换为字符串数组。我不知道
Array.ConvertAll
是否是最好的方法。我还没有测试这段代码,它可能会给我一个整数数组,而不是文本表示。你有什么建议吗?你可以调用myArray.Select(函数(e)e.ToString()).ToArray()。这将适用于任何数组。如果返回值不局限于
字符串
数组,则可能更为通用,如果我想要整数或长数组等等,会怎么样?那么你的处境将与OP不同,OP明确表示他们想要
字符串
数组。如果您希望能够临时决定输出类型,那么根据需要调用
Select
ToArray
显然是一个合乎逻辑的选择,因为
Select
方法可以准确地知道项目的类型,并且使用
Cint
CLng
Enum
值转换为数字将是简单而合理的。如果返回不限制为
字符串
数组,那么它可能更通用,如果我想要一个整型或长型数组等等,你会遇到与OP不同的情况,OP明确表示他们想要一个
字符串
数组。如果您希望能够临时决定输出类型,那么根据需要调用
Select
ToArray
显然是一个合乎逻辑的选择,因为
Select
方法准确地知道项目的类型,使用
Cint
CLng
Enum
值转换为数字将是简单而合理的。