동일한 초기화 목록 내의 람다 식 정의에는 익명 형식 속성 '<propertyname>'을(를) 사용할 수 없습니다.
업데이트: 2007년 11월
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}
오류 ID: 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