次のクラスを検討してください。
public class Score
{
private static readonly Guid _relationId = Guid.NewGuid();
public Guid Id { get; set; }
public Guid RelationId { get { return _relationId; } }
public Score()
{
Id = Guid.NewGuid();
}
}
次の関数:
public IEnumerable<Score> GetScores()
{
yield return new Score();
yield return new Score();
yield return new Score();
}
次の関数が1を返すのはなぜですか。
public int Execute()
{
var scores = GetScores();
IList<Score> externalScores = new List<Score>();
var filteredScores = scores.Where(score => externalScores.All(x => x.RelationId != score.RelationId));
foreach (var score in filteredScores)
{
externalScores.Add(score);
}
return externalScores.Count();
}
しかし、( foreach ループ内または linq 操作の後に)を追加.ToList()
すると、関数の結果は3になります。filteredScores
Closing over the loop variableと関係があると思われますが、これを理解できないようです。