2016-05-19 2 views
0

вы можете initialize an anonymous object так:Синтаксис для инициализации массива Анонимных объектов

Dim cust = New With {.Name = "Hugo", .Age = 23} 

И вы можете initialize a collection так:

Dim numbers = {1, 2, 3, 4, 5} 
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"} 

Но вы можете инициализировать массив анонимного объекта с поддержкой синтаксиса

Вы можете сделать это вот так, но custs будет просто pla в object:

Dim custs = { New With {.Name = "Hugo", .Age = 23}, New With {.Name = "Boss", .Age = 32} }

Вы можете сделать это так, но каждый элемент custs будет только простой object:

Dim custs As New List(Of Object) From { New With {.Name = "Hugo", .Age = 23}, New With {.Name = "Boss", .Age = 32} }

Как я могу инициализировать список/коллекция/массив так что я могу получить доступ к полной мощности коллекции, а также свойства анонимного типа внутри

ответ

0

Проблема wa с с опцией для Inferred Typing выключен. Это можно проиллюстрировать на более простом примере, когда инициализация объекта без объявления его типа сначала привела к простому, скучному объекту.

= vs. As assignment

Чтобы решить эту проблему, вы можете включить Inferred Typing с утверждением опции:

Option Infer On 

Теперь наш простой пример дата должна работать:

Dim x = New DateTime

Наконец, просто убедитесь, что вы скомпилируете код один раз, потому что анонимные объекты фактически реализованы как скрытые классы за кулисами.

enter image description here

+0

Это называется "Inferred набрав" (идентично с помощью "вар" в C#) и не существует требование использовать Option Strict Off. Динамическое типирование использует параметр Strict Off и объявляется как Object (идентично использованию «dynamic» в C#). –

+0

Исправлено. Спасибо Дэйву! – KyleMit

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