
List<Person> people = new List<Person>() { new Person() { ID = 1,name = "John",parentID = null },new Person() { ID = 2,name = "Sarah",new Person() { ID = 3,name = "DanIEl",parentID = 1 },new Person() { ID = 4,name = "Peter",parentID = 1 } }; List<object> peopleTree = new List<object>(); var parents = people.Where(p => !p.parentID.HasValue); foreach (Person parent in parents) { int parentID = parent.ID; var children = people //.Where(p => p.parentID.Equals(parentID)) //This works,is able to find the children .Where(p => p.parentID.Equals(parent.ID)) //This does not work,no children for John .Select(p => new { ID = p.ID,name = p.name,pID = parent.ID }); //pID set correctly peopleTree.Add(new { ID = parent.ID,name = parent.name,Children = children }); } 或者,如果我使用for循环并将parent放在变量中,我可以直接在Where语句中访问parent.ID属性.
var parents = people.Where(p => !p.parentID.HasValue).ToArray();for (int IDx = 0; IDx < parents.Count(); IDx++){ var parent = parents[IDx];... 我无法找到它为何如此行为的答案.
有人能解释一下吗?
您可以通过引入临时方式来修复它,或者在foreach循环仍在当前迭代中时强制进行评估:
var children = people .Where(p => p.parentID.Equals(parent.ID)) .Select(p => new { ID = p.ID,pID = parent.ID }) .ToList(); 总结 以上是内存溢出为你收集整理的在foreach中的Enumerable.Where中无法访问C#对象属性全部内容,希望文章能够帮你解决在foreach中的Enumerable.Where中无法访问C#对象属性所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)