如何为 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
正如我在评论中所说,您可以根据需要调用 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
没有通用约束可以限制该方法只能在 Enum
值的数组上调用,因此您可以使用 If
语句来 return Nothing
或抛出异常。不过,我真的不明白这一点,因为如果您允许在任何其他类型的另一个数组上调用相同的方法,这真的没有什么坏处。
下面是我的代码,但该方法不适用于枚举数组。我不知道我做错了什么。请注意,在枚举数组上使用此方法之前,我无法测试行 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
正如我在评论中所说,您可以根据需要调用 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
没有通用约束可以限制该方法只能在 Enum
值的数组上调用,因此您可以使用 If
语句来 return Nothing
或抛出异常。不过,我真的不明白这一点,因为如果您允许在任何其他类型的另一个数组上调用相同的方法,这真的没有什么坏处。