VB.NET ArrayList для списка (Of T) типизированного копирования / преобразования - PullRequest
6 голосов
/ 24 августа 2010

У меня есть сторонний метод, который возвращает старый массив ArrayList, и я хочу преобразовать его в типизированный ArrayList (Of MyType).

Dim udc As ArrayList = ThirdPartyClass.GetValues()
Dim udcT AS List(Of MyType) = ??

Я сделал простой цикл, но тамдолжно быть лучше:

Dim udcT As New List(Of MyType)
While udc.GetEnumerator.MoveNext
    Dim e As MyType = DirectCast(udc.GetEnumerator.Current, MyType)
    udcT.Add(e)
End While

Ответы [ 4 ]

19 голосов
/ 24 августа 2010
Dim StronglyTypedList = OriginalArrayList.Cast(Of MyType)().ToList()
' requires `Imports System.Linq`
0 голосов
/ 15 июня 2015

Я хотел бы указать кое-что как на DirectCast, так и на System.Linq.Cast (это то же самое в последней версии .NET, по крайней мере). Они могут не работать, если тип объекта в массиве определяетсяпользовательский класс, и его нелегко преобразовать в типы объектов, которые распознает .NET.Я не знаю, почему это так, но, похоже, это проблема в программном обеспечении, для которого я разрабатываю, и поэтому для этого мы были вынуждены использовать решение неэлегического цикла.

0 голосов
/ 24 августа 2010

Как насчет этого?

Public Class Utility

    Public Shared Function ToTypedList(Of C As {ICollection(Of T), New}, T)(ByVal list As ArrayList) As C

        Dim typedList As New C
        For Each element As T In list
            typedList.Add(element)
        Next

        Return typedList
    End Function

End Class

Если бы работал для любого объекта коллекции.

0 голосов
/ 24 августа 2010

Дублировать. Посмотрите на этот SO-поток: В .Net как конвертировать ArrayList в строго типизированный общий список без использования foreach?

В VB.Net с платформой <3.5: </p>

Dim arrayOfMyType() As MyType = DirectCast(al.ToArray(GetType(MyType)), MyType())
Dim strongTypeList As New List(Of MyType)(arrayOfMyType)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...