Какой эквивалентный синтаксис VB.NET для анонимных типов в инструкции LINQ?
Я пытаюсь перевести некоторый код С# LINQ в VB.NET и зациклился на том, как объявить анонимный тип в VB.NET.
.Select(ci =>
new { CartItem = ci,
Discount = DiscountItems.FirstOrDefault(di => di.SKU == ci.SKU) })
Как вы переводите синтаксис С# new { ... }
в VB.NET?
Ответы
Ответ 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)