匿名型プロパティ '<propertyname>' を、同じ初期化一覧内のラムダ式の定義で使用することはできません。Anonymous type property '<propertyname>' cannot be used in the definition of a lambda expression within the same initialization list

匿名型の初期化リストで定義されたプロパティは、同じリスト内のラムダ式の定義に含めることはできません。Properties defined in the initialization list of an anonymous type cannot be part of a lambda expression definition in the same list. たとえば、次のコードでは、プロパティ NumLambdaFunの定義に含めることはできません。For example, in the following code, property Num cannot be included in the definition of LambdaFun.

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

エラー ID: BC36549Error ID: BC36549

このエラーを解決するにはTo correct this error

  1. 匿名型を 2 つの部分に分割することを検討してください。Consider splitting the anonymous type into two parts:

    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.NumKey プロパティとして宣言する場合は、その値を変更できません。Note that if you declare anon1.Num as a Key property, its value cannot be changed.

  2. または、通常の関数ステートメントを使用して、匿名型のプロパティにアクセスします。An alternative is to use a regular function statement to access the anonymous type property:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. 同様に、匿名型の外部で定義されているラムダ関数を使用できます。Similarly, you can use a lambda function that is defined outside the anonymous type:

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

関連項目See also