4
//var sample= new { bottom=2, top=5,count=4};
var sample= new [] {2,3,4,5,6};
var q = from x in new int[]{0} //force desired behavior
    from i in sample
    from j in sample
    select Math.Pow(i,j);


q.Distinct().Count().Dump();
sample = new[]{2,3,4,5};
//q = from i in Enumerable.Range(sample.bottom, sample.top-sample.bottom+1)
//  from j in Enumerable.Range(sample.bottom, sample.top-sample.bottom+1)
//  select checked(System.Numerics.BigInteger.Pow((BigInteger)i,j));
q.Distinct().Count().Dump();

from x lineが存在しない場合、または変数のリセットが行われていない場合、2 番目の回答は毎回正しくありませqん (ここではコメントアウトされています)。

元のサンプルは匿名変数でしたが、配列もそれを行いました。

var sample = new { bottom =2, top=5};

ループで定義されたこのScope of Linq Expressions に関連していますか - 問題: ループ変数を閉じていますか?

上部に 1 項目の配列を配置すると、クロージャが修正されるのはなぜですか?

4

2 に答える 2