【发布时间】:2012-05-22 11:36:19
【问题描述】:
考虑以下类:
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();
}
但是当我将.ToList() 添加到filteredScores 时(无论是在foreach 循环中还是在linq 操作之后),函数的结果是3。
我怀疑它与Closing over the loop variable 有关,但我似乎无法弄清楚。
【问题讨论】:
-
您的代码目前已经有
ToList();我猜你忘了把它拿出来。