Поделиться через


Свойство анонимного типа <ИмяСвойства> нельзя использовать в определении лямбда-выражения в том же списке инициализации

Обновлен: Ноябрь 2007

Anonymous type property '<propertyname>' cannot be used in the definition of a lambda expression within the same initialization list

Свойства, определенные в списке инициализации анонимного типа, не могут быть частью определения лямбда-выражения в том же списке инициализации. Например, в следующем коде свойство Num нельзя включать в определение лямбда-выражения LambdaFun.

' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}

Идентификатор ошибки: BC36549

Исправление этой ошибки

  1. Рассмотрим разделение анонимного типа на две части:

    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, то ее значение изменить нельзя.

  2. Альтернативой является использование операторов регулярных функций для обращения к свойству анонимных типов:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. Аналогично, можно использовать лямбда-функции, определенные вне анонимного типа:

    Dim lambdaFun1 = Function() anon1.Num > 0
    Dim lambdaFun2 = Function(n As Integer) n > 0
    

См. также

Основные понятия

Лямбда-выражения

Анонимные типы