共用方式為


匿名型別屬性 '<propertyname>' 不能用在同一個初始設定清單中 Lambda 運算式的定義中

更新:2007 年 11 月

在匿名型別的初始設定清單中定義的屬性,不能是同一份清單中 Lambda 運算式定義的一部分。例如,在下列程式碼中,屬性 Num 不能包含在 LambdaFun 的定義中。

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

錯誤 ID: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. 同樣地,您可以使用在匿名型別外定義的 Lambda 函式:

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

請參閱

概念

Lambda 運算式

匿名型別