2009-04-20 5 views
1

В настоящее время я пишу вспомогательную функцию в VB.NET для преобразования массива значений перечисления в CSV, но я сталкиваюсь с некоторыми трудностями ....Общий массив значений enum?

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

Это то, что я получил до сих пор:

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 

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

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

ответ

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, потому что он помещает типы рядом с переменной, которые содержат их, а не наоборот.
  • Этот код примет массив. Он также примет список или любую другую коллекцию, о которой вы можете подумать. Это хорошо - это делает ваш код более мощным и гибким.
  • Этот код не ограничен значениями перечисления, но значения перечисления - это всего лишь тип. Нет ничего особенного в значениях themsevles. Это не очень плохо. Он по-прежнему работает для значений перечисления, поэтому вы можете использовать его просто отлично. То, что он работает для других предметов, не обязательно является недостатком.
+0

Незначительная синтаксическая ошибка в коде выше Для цикла, вероятно, следует читать «Для каждого элемента As T in Values» –

+0

Спасибо, исправлено. Слишком много времени написание C# в последнее время: o –

Смежные вопросы