Как создать метод расширения для любого типа массива Enum в VB.Net - PullRequest
0 голосов
/ 11 мая 2018

Ниже приведен код, который у меня есть, но метод недоступен в массивах Enum.Я не могу понять, что я делаю неправильно.Обратите внимание, что я не могу проверить строку Array.ConvertAll, пока у меня не будет доступен этот метод для массивов Enum.

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

1 Ответ

0 голосов
/ 11 мая 2018

Как я уже сказал в своем комментарии, вы можете просто позвонить 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, чтобы либо вернуть Nothing, либо выдать исключение.Однако я не вижу в этом смысла, поскольку на самом деле не повредит, если вы все равно разрешите вызывать этот же метод для другого массива любого другого типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...