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

How to create an extension method for any type of Enum array in VB.Net

下面是我的代码,但该方法不适用于枚举数组。我不知道我做错了什么。请注意,在枚举数组上使用此方法之前,我无法测试行 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

正如我在评论中所说,您可以根据需要调用 SelectToArray。如果你真的想要一个扩展,你需要使你的方法通用:

<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

没有通用约束可以限制该方法只能在 Enum 值的数组上调用,因此您可以使用 If 语句来 return Nothing 或抛出异常。不过,我真的不明白这一点,因为如果您允许在任何其他类型的另一个数组上调用相同的方法,这真的没有什么坏处。