Tag: ienumerable

使用IEnumerable 和Linq-To-Sql时如何防止内存溢出?

这个问题与我之前的一个问题有关 这是我目前的代码 IEnumerable Get() { while(//get implementation yield return new Shape(//… } void Insert() { var actual = Get(); using (var db = new DataClassesDataContext()) { db.Shapes.InsertAllOnSubmit(actual); db.SubmitChanges(); } } 我的内存溢出,因为IEnumerable太大了。 我该如何预防呢?

MVC错误“属于’System.Int32’类型,但必须是’IEnumerable ‘类型。 “

我有这样的模特; public int ID{ get; set; } public string MidName{ get; set; } public string FirstName{ get; set; } public string Surname{ get; set; } 这是我的控制器: public ActionResult Create(){ ViewBag.Names= new SelectList(db.TbName, “ID”, “MidName”); return Viwe(); } 这是我的观点 @Html.LabelFor(model => model.Names, new { @class = “control-label col-md-2” }) @Html.DropDownList(“Names”, String.Empty) @Html.ValidationMessageFor(model => model.Names) 现在,当单击“创建”按钮时,我收到错误消息 `具有键’Names’的ViewData项的类型为’System.Int32’,但必须是’IEnumerable’类型。 […]

IEnumerable 如何在后台运行

我正在徘徊IEnumerable接口的更深入的function。 基本上,它作为执行中的中间步骤。 例如,如果你写: IEnumerable temp = new int[]{1,2,3}.Select(x => 2*x); 在使用temp进行某些操作(例如List list = temp.ToList() )之前,不会计算(枚举) Select函数的结果。 但是,令我困惑的是,因为IEnumerable是一个接口,所以根据定义它不能被实例化。 那么,实际项目(在示例2*x项目中)所在的集合是什么? 而且,如果我们要编写IEnumerable temp = Enumerable.Repeat(1, 10); ,什么是存储1s的底层集合(数组,列表,其他)? 我似乎无法找到关于此接口及其function的实际实现的详尽(更深入)解释(例如,如果存在底层集合, yield关键字如何工作)。 基本上,我要求的是对IEnumerable的function进行更详细的解释。

理解C#中的IEnumerable

我试图理解C#中的IEnumerable接口。 正如MSDN中所述 IEnumerable公开了一个枚举器,它支持对非generics集合的简单迭代。 这很简单。 当我们有一个实现这个接口的集合时,我们得到一个实现IEnumerator接口的枚举器,( http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.getenumerator ( v=vs) .110).aspx ),使用这个枚举器,我们可以通过以下方式迭代集合的所有元素: foreach(var item in items) { // code goes here } 在上面的代码片段中, items是一个实现IEnumerable接口的集合。 这是可能的,因为枚举器有一个名为Current的属性,它具有集合的当前元素和枚举器使用的方法MoveNext ,以移动到下一个元素。 最后但并非最不重要的是,它有一个名为Reset的方法,它将枚举数设置为其初始位置,该位置在集合中的第一个元素之前,如MSDN中所述。 我们有以下代码片段: int[] array = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; IEnumerable numbers = array; foreach (var number in numbers) { Console.WriteLine(number); } […]

C#如何将IEnumerable匿名列表转换为数据表

有许多解决方案可以将列表转换为使用reflection的DataTable ,这可用于转换匿名类型。 但是,它有很多匿名类型的列表,然后性能可能是一个问题。 这是从列表创建DataTable的唯一方法吗? 有更快的方法吗?

C#foreach on IEnumerable vs. List – 元素修改仅对数组持久 – 为什么?

在C#中,我注意到如果我在LINQ生成的IEnumerable集合上运行foreach循环并尝试修改每个T元素的内容,那么我的修改不会持久。 另一方面,如果在创建集合时应用ToArray()或ToList()方法,则对foreach循环中各个元素的修改是持久的。 我怀疑这在某种程度上与延迟执行有关,但究竟对我来说并不完全是显而易见的。 我真的很感激这种行为差异的解释。 这是一些示例代码 – 我有一个带有构造函数和自动实现属性的类MyClass : public class MyClass { public MyClass(int val) { Str = val.ToString(); } public string Str { get; set; } } 在我的示例应用程序中,我使用LINQ Select()通过最终应用ToList()方法,基于整数集合创建两个MyClass对象集合,一个IEnumerable和一个IList 。 var ints = Enumerable.Range(1, 10); var myClassEnumerable = ints.Select(i => new MyClass(i)); var myClassArray = ints.Select(i => new MyClass(i)).ToList(); 接下来,我在每个集合上运行一个foreach循环,并修改循环的MyClass对象的内容: foreach (var obj in […]

迭代到IEnumerable 和List 之间的性能

今天,我在迭代一系列项目时遇到了性能问题。 在完成一些诊断后,我终于找到了降低性能的原因。 事实certificate,迭代IEnumerable花费的时间比迭代List要多得多。 请帮助我理解为什么IEnumerable比List慢。 更新基准上下文: 我正在使用NHibernate从数据库中获取项目集合到IEnumerable并将其属性的值相加。 这只是一个没有任何引用类型的简单实体: public SimpleEntity { public int Id {get;set} public string Name {get;set} public decimal Price {get;set} } Public Test { void Main() { //this query get a list of about 200 items IEnumerable entities = from entity in Session.Query select entity; decimal value = 0.0; foreach(SimpleEntity item in entities) […]

从List 到IEnumerable 返回List 的转换无效,为什么?

所以基本上我有这个方法。 public List FilterCustomersByStatus(List source, string status) { return (List)source.Where(c => c.Status == status); } 我抛出一个它无法投射的错误: 无法将类型为’WhereListIterator`1 [AppDataAcces.Customer]’的对象转换为’System.Collections.Generic.List`1 [AppDataAcces.Customer]’。 为什么…? 由于底层类型是相同的,Enumerable.Where是否创建了WhereListIterator的新实例,如果是这样,为什么有人会这样做,因为这是不必要的性能和function损失,因为我总是要创建一个新列表(.ToList( ))

如何在MVC视图中显示对象列表?

我有一个返回字符串列表的方法。 我只想在视图中以纯文本forms显示该列表。 这是控制器的列表: public class ServiceController : Controller { public string Service() { //Some code………. List Dates = new List(); foreach (var row in d.Rows) { Dates.Add(row[0]); } return Dates.ToString(); } public ActionResult Service() { Service(); } } 并且观点: HEJ @Html.Action(“Service”, “Service”) 我想我必须在视图中做一些像foreach循环一样的东西,并使用“@”引用列表,但是如何?

C#无法从IEnumerable 转换为IEnumerable

我最近在尝试将AddRange(IEnumerable)添加到List时遇到了麻烦。 可能是一个经典问题,但我还没有真正得到它。 我知道期望List参数的方法不满足List,因为他们可能会尝试向List添加Base,这显然是不可能的。 但是,如果我得到正确的,因为IEnumerables本身不能改变,它应该在这种情况下工作。 我想到的代码看起来像这样: class Foo { } class Bar : Foo { } class FooCol { private List m_Foos = new List (); public void AddRange1(IEnumerable foos) { m_Foos.AddRange (foos); // does work } public void AddRange2(IEnumerable foos) where T : Foo { m_Foos.AddRange (foos); // does not work } } class Program […]