Коллекция анонимных типов - PullRequest
       14

Коллекция анонимных типов

2 голосов
/ 12 февраля 2011

Как бы вы решили это?Я хочу вернуть эту коллекцию:

Public Function GetShippingMethodsByCarrier(ByVal Carrier As ShippingCarrier) As List(of ?)

    Return Carrier.ShippingMethods.Select(Function(x) New With {.ID = x.ID, .Name = String.Format("{0} {1}", Carrier.Name, x.Description)})


End Function

Спасибо !!

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011

Проблема в том, что вы пытаетесь вернуть анонимный тип строго типизированным способом. Это просто невозможно в VB.Net (или C # в этом отношении). Анонимные типы должны быть анонимными, и их имена не могут быть явно указаны в коде. Два способа обойти это:

Вариант # 1 Использовать / Создать строго именованный тип, подобный следующему

Structure Item
  Public ID as Integer
  Public Name As String
  Public Description As String
End Structure

Опция # 2 Установите тип возвращаемого значения Object и получите доступ к списку с поздним ограничением

EDIT

В качестве CodeInChaos их можно возвращать строго типичным образом в общем контексте. Но, похоже, это не поможет вам решить эту конкретную проблему.

2 голосов
/ 12 февраля 2011

Вы не можете вернуть анонимный тип из функции, подобной этой, потому что у нее нет имени.

Поскольку это открытая функция, она должна иметь четко определенный тип возвращаемого значения. Создайте новый класс, содержащий эти два свойства.

Его можно вернуть, если тип возвращаемого значения - предполагаемый универсальный параметр, но здесь это не то, что вам нужно. Это полезно для LINQ, когда анонимный тип по существу передается из параметра в тип результата, но не полезен для того, что вы делаете.

Вы также можете использовать кортеж, но тогда вы потеряете имена свойств. И это не будет расширяемым, так как добавление нового свойства нарушит код вызывающей стороны. Так что я бы тоже не советовал.

...