匿名型のプロパティの '<propertyname>' は、同じ初期化リスト内のラムダ式の定義では使用できない

更新 : 2007 年 11 月

匿名型の初期化リストで定義されたプロパティは、同じリストのラムダ式の定義の一部にすることはできません。たとえば、次のコードでは、Num プロパティを LambdaFun の定義に含めることはできません。

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

エラー ID: BC36549

このエラーを解決するには

  1. 匿名型を 2 つの部分に分割することを検討してください。

    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. もう 1 つの方法は、通常の関数ステートメントを使用して匿名型プロパティにアクセスすることです。

    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
    

参照

概念

ラムダ式

匿名型