Каков эквивалентный синтаксис VB.NET для анонимных типов в операторе LINQ? - PullRequest
20 голосов
/ 29 июня 2010

Я пытаюсь перевести некоторый код C # LINQ в VB.NET и застрял на том, как объявить анонимный тип в VB.NET.

.Select(ci => 
    new { CartItem = ci, 
          Discount = DiscountItems.FirstOrDefault(di => di.SKU == ci.SKU) }) 

Как вы переводите синтаксис C # new { ... }в VB.NET?

Ответы [ 2 ]

34 голосов
/ 29 июня 2010

new { ... } становится

New With { ... } в VB.NET,

или

New With {Key ... }, если вы хотите использовать свойства ключа (что позволяет сравниватьдва экземпляра анонимного типа, но не позволяют изменять значения этих свойств).

Итак, я предполагаю, что ваше утверждение будет выглядеть так:

.Select(Function(ci) New With {Key _
    .CartItem = ci, _
    .Discount = DiscountItems.FirstOrDefault(Function(di) di.SKU = ci.SKU) _
})
13 голосов
/ 29 августа 2015

C #:

new {name1 = "value1", name2 = "value2"}

VB эквивалент:

New With {Key .name1 = "value1", Key .name2 = "value2"}

Кроме того,

C #:

new {anotherObj.prop1, anotherObj.prop2}

VB эквивалент:

New With {Key anotherObj.prop1, Key anotherObj.prop2}

Примечание. Ключевое слово Key в VB-эквивалентах необходимо. Когда вы указываете Key в VB, свойство становится доступным только для чтения и проверяется в методе Equal И в C # все свойства анонимных типов доступны только для чтения и проверяются в методе Equal.

См:

Анонимные типы (Руководство по программированию в C #)

Анонимные типы (Visual Basic)

...