Каков эквивалентный синтаксис VB.NET для анонимных типов в операторе LINQ?

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

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

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


person Ben McCormack    schedule 29.06.2010    source источник


Ответы (2)


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

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

or

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

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

.Select(Function(ci) New With {Key _
    .CartItem = ci, _
    .Discount = DiscountItems.FirstOrDefault(Function(di) di.SKU = ci.SKU) _
})
person Justin Niessner    schedule 29.06.2010
comment
Спасибо! Попытка написать что-то настолько простое на VB чрезвычайно сложно при регулярной работе на C#. - person Pat Migliaccio; 09.06.2016

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)

person Guido Mocha    schedule 29.08.2015
comment
Ключевое слово Key действительно необходимо, если вы хотите точно такое же поведение, как C#. Просто чтобы уточнить, VB дает вам некоторую гибкость с анонимными типами, которую C# не предоставляет. Любые поля, которым не предшествует Key, доступны для чтения и записи, а не только для чтения, и исключаются из сравнений на равенство, что может быть именно тем, что вам нужно. - person Darryl; 30.01.2019