5

私は VB.NET で LINQ を使用していますが、次のようなクエリが表示されることがあります。

For i = 0 To 10
  Dim num = (From n In numbers Where n Mod i = 0 Select n).First()
Next

「ラムダ式で反復変数を使用すると、予期しない結果が生じる可能性があります。代わりに、ループ内でローカル変数を作成し、反復変数の値を割り当ててください。」という警告が表示されます。

ラムダ式は必要な場合にのみ評価されるため、ラムダ式で反復変数を使用することはお勧めできません。(この質問はそれについてです)

ここで私の質問は、First()、Single()、ToList() などの構造を使用して、式がその場で評価される場合にこの警告を抑制する方法です (これは単なる警告ですが、コードがクリーンなのが好きです) .)

(ローカル変数を宣言して反復変数を渡すことはオプションですが、私はクリーンな解決策を探しています。)

4

1 に答える 1

5

ラムダがすぐに評価されるこの特定のケースでは、反復変数の宣言を for ループの外に移動することで、警告を安全に取り除くことができます。

Dim i = 0
For i = 0 To 10 
 ...

ただし、これはラムダが for ループをエスケープしない場合にのみ機能することを強調したいと思います (シナリオに当てはまります)。

また、この警告について私が書いた記事への詳細なリンクもあります (警告が存在する理由、回避方法など...)

于 2010-09-30T21:08:08.220 に答える