Свойство анонимного типа "<propertyname>" нельзя использовать в определении лямбда-выражения в одном списке инициализации.
Свойства, определенные в списке инициализации анонимного типа, не могут быть частью определения лямбда-выражения в том же списке. Например, в приведенном ниже коде свойство Num
нельзя включать в определение лямбда-выражения LambdaFun
.
' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}
Идентификатор ошибки: BC36549
Исправление ошибки
Попробуйте разделить анонимный тип на две части.
Dim anon1 = New With {.Num = 4} Dim anon2 = New With {.LambdaFun = Function() anon1.Num > 0} ' - or - Dim anon3 = New With {.lambdaFun = Function(n As Integer) n > 0} Console.WriteLine((anon2.LambdaFun)()) Console.WriteLine(anon3.lambdaFun(anon1.Num)) anon1.Num = -5 Console.WriteLine((anon2.LambdaFun)()) Console.WriteLine(anon3.lambdaFun(anon1.Num))
Обратите внимание, что если объявить
anon1.Num
как свойствоKey
, то его значение изменить нельзя.Альтернативой является использование обычного оператора функции для обращения к свойству анонимного типа.
Function testNum(ByVal n As Integer) As Boolean Return n > 0 End Function Console.WriteLine(testNum(anon1.Num))
Аналогичным образом можно использовать лямбда-функцию, определенную вне анонимного типа.
Dim lambdaFun1 = Function() anon1.Num > 0 Dim lambdaFun2 = Function(n As Integer) n > 0
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по