【问题标题】:How to Preform foreach in a IEnumerable object如何在 IEnumerable 对象中执行 foreach
【发布时间】:2017-04-18 03:59:43
【问题描述】:

我有一个包含多个值的IEnumerable 列表,我想foreach 超过它的值。我有这个代码

IEnumerable<object> Place = db.Places.Select(x => new { Id = x.Id, Nam1 = x.Name1, Name2 = x.Name2);

foreach(dynamic thisPlace in Place) 
{
    Response.Write (thisPlace.Id)
    Response.Write (thisPlace.Name1)
    Response.Write (thisPlace.Name2)
}

这段代码工作正常,完成后,它会抛出一个错误:

在序列化“System.Data.Entity.DynamicProxies.Place_F6C785C74658C47ED4BFCF45D13FE7D754CCA2F688B6CBDD079244CE52B46291”类型的对象时检测到循环引用。”

现在的问题是如何以正确的方式使用 foreachIEnumerable

【问题讨论】:

  • 这里的旅行是什么?
  • 错了我修改一下
  • 您最好还是阅读一些 c# 书籍。如果您使用 var 而不是 IEnumerable。然后,如果您将 var 用作循环变量而不是动态变量 - 一切都会好起来的。你也想要 .ToList() 或 .ToArray() 你的枚举。这是一个“最佳实践”。
  • 错误不可能来自您显示的代码。没有任何实体对象通过序列化程序除非 Name1Name2 不是字符串,正如它们的名字所暗示的那样。
  • @AlexanderTaran ... 我理解 IEnumerable 和 var 之间的区别.....我修改了代码以适应,谢谢

标签: c# entity-framework linq foreach ienumerable


【解决方案1】:

首先,您的代码不会被执行。因为您没有代码中显示的名为 Name1 的属性。

其次,即使你有你也应该使用 var 而不是使用 IEnumerable&lt;object&gt;

var Places = db.Places.Select(x => new { Id = x.Id, Nam1 = x.Name1, Name2 = x.Name2}).ToList();
foreach (var thisPlace in Places)
{
  Response.Write(thisPlace.Id)
  Response.Write(thisPlace.Name1)
  Response.Write(thisPlace.Name2)
}

【讨论】:

  • 请解释你的答案,为什么这会有所不同?
  • 这段代码和我的代码一样工作正常......但正如我所说的错误是在代码执行完成之后......然后我在其他地方找出问题并解决它,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2020-12-27
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
相关资源
最近更新 更多