|
■No78336 (ぜんざい部長 さん) に返信 > サルのように使っています。 今年の干支ですものね!(謎
> 何だかスッキリしません。 ラムダ式がいつ呼び出されるのかが問題になります。
Dim x(2) As Func(Of Integer) For i = 0 To 2 x(i) = Function() i Method1(x(i)()) Next For i = 0 To 2 Method2(x(i)()) Next
たとえば上記だと、Method1 には 0, 1, 2 が渡されますが、 Method2 には 3, 3, 3 が渡されるため、曖昧さが残ります。 ここで 3 が渡されることは予測しにくいわけで。
> こういった場合、どのようなコードを書くのがよいのでしょうか?
警告 42324 を nowarn 指定する手もありますが、それは避けたいところでしょうしね。 処理内容にもよりますが、たとえば
For Each obj As Class1 In lst1 Dim cache = obj Dim q = From c In lst2 Where c.Hogehoge(cache) '(略) Next
を使いたくないのだとすれば、
lst1.ForEach( Sub(obj As Class1) Dim q = From c In lst2 Where c.Hogehoge(obj) '略 End Sub )
のように処理するか、あるいはちょっと意味が変わってきますが、
Dim q = From c1 In lst1 From c2 In lst2 Where c2.Hogehoge(c1) Select c2 For Each c In q '(略) Next
のようにしてみることで代用できるかもしれません。
|