Общий массив значений Enum? - PullRequest
1 голос
/ 20 апреля 2009

В настоящее время я пишу вспомогательную функцию в VB.NET для преобразования массива значений enum в 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

Я понимаю, что аргумент неверен, так как я работаю с массивом перечислений. В идеале я хотел бы работать с общим набором значений enum.

Может кто-нибудь помочь?

1 Ответ

4 голосов
/ 20 апреля 2009
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(), а не TypeToType() соглашение о присвоении имен , потому что оно размещает типы рядом с переменной, которая их содержит, а не наоборот.
  • Этот код будет принимать массив. Он также примет список или почти любую другую коллекцию, о которой вы можете подумать. Это хорошо - это делает ваш код более мощным и гибким.
  • Этот код не ограничен значениями перечисления, но значения перечисления являются просто типом. В ценностях нет ничего особенного. Это не так уж плохо. Это все еще работает для значений перечисления, так что вы можете использовать его просто отлично. То, что это работает для других предметов, не обязательно является недостатком.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...