枚举值的通用数组?

时间:2009-04-20 14:29:37

标签: .net enums

我目前正在VB.NET中编写一个辅助函数来将枚举值数组转换为CSV,但是我正在困扰一些......

如果我想让它足够通用以处理我传入它的任何枚举,我不确定我的函数应该采用什么类型的争论。

这是我到目前为止所得到的:

Public Shared Function EnumArrayToCSV(ByVal values() As System.Enum) As String
    Dim result As Generic.List(Of String) = New Generic.List(Of String)

    For i As Integer = 0 To values.GetUpperBound(0)
        result.Add(Convert.ToInt32(values(i)))
    Next i

    Return String.Join(",", result.ToArray)
End Function

我意识到,当我使用一系列枚举时,争论是不正确的。理想情况下,我想使用一组通用的枚举值。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

Public Shared Function CSVFromEnumValues(Of T)(ByVal values As IEnumerable(Of T)) As String
    Dim sb As New StringBuilder()

    Dim delimiter As String = ""
    For Each item As T In values
        sb.Append(delimiter).Append(Convert.ToInt32(item).ToString())
        delimiter = ","
    Next item

    return sb.ToString()
End Function

关于此代码的一些注意事项:

  • 我更喜欢TypeFromType() rather than TypeToType() naming convention,因为它将类型放在包含它们的变量附近而不是相反。
  • 此代码将接受一个数组。它还会接受您能想到的列表或大多数其他集合。这是一件好事 - 它使您的代码更加强大和灵活。
  • 此代码不限于枚举值,但枚举值只是一种类型。关于它们的价值并没有什么特别之处。这不是一件坏事。它仍适用于枚举值,因此您可以正常使用它。它适用于其他项目并不一定是个缺陷。