Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

или

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

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

.Select(Function(ci) New With {Key _
    .CartItem = ci, _
    .Discount = DiscountItems.FirstOrDefault(Function(di) di.SKU = ci.SKU) _
})

Ответ 2

С#:

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

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

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

Также,

С#:

new {anotherObj.prop1, anotherObj.prop2}

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

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

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

Увидеть:

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

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