Tag: ienumerable

如何从声明为IEnumerable 的方法/属性中安全地返回List ?

假设我使用List字段支持IEnumerable属性,因此我可以在类中修改集合,但它是以只读方式公开公开的。 public class Foo { private List _bar = new List(); public IEnumerable Bar { get { return _bar; } } } 但是使用这样的代码,您可以轻松地将从属性中检索到的对象转换回List并对其进行修改: var foo = new Foo(); var bar = (List)foo.Bar; bar.Add(10); 问题是: 什么是最好的(最好的可读性,最容易编写,没有性能损失)避免这种情况的方法? 我可以提出至少4个解决方案,但不是它们是完美的: foreach和yield return : public IEnumerable Bar { get { foreach (var item in _bar) yield return item; } } […]

RemoveRange()方法如何在List 中工作?

如标题。 我知道它可能在删除项目之前和之后合并了2个子列表,但是在删除LAST元素时该方法如何表现? 换句话说:它是否以某种方式复制了删除索引之前所有元素? 我只是对在巨型列表上使用RemoveRange的性能感到好奇(比方说5000个元素)只是为了删除fe中的最后2个。 如果它复制了那么,是否有办法更改一些设置List大小的内部变量(并将其余的已分配元素视为垃圾)? 我只是设法找到一个信息,它是一个O(n)复杂度算法,但我不确定该情况下的“n”是列表大小,还是要删除的项目数。 任何提示都会很高兴。

IEnumerable和数组有什么区别?

是否有人会描述IEnumerable以及IEnumerable和数组之间的区别以及在何处使用它…所有关于它的信息以及如何使用它。

为什么ForEach Linq扩展列表而不是IEnumerable

可能重复: 为什么IEnumerable接口上没有ForEach扩展方法? 你好, 我的问题是为什么Foreach扩展方法是在List而不是IEnumreable上定义的。 我已经阅读了Eric Lippert的文章,但重点是,如果有这样的方法比为什么它的列表那么糟糕?

在IList.IndexOf()之类的东西,但在IEnumerable ?

在IEnumerable上是否有任何方法/扩展方法允许我在其中找到对象实例的索引? 像IList中的IndexOf()? indexPosition = myEnumerable.IndexOf() ? 谢谢

在ASP.NET MVC POST中绑定IEnumerable的模型?

将IEnumerable类型的模型绑定到MVC POST是否有任何问题? 我的模型中的某些属性未绑定到操作的post。 似乎模型上的属性就像字符串一样好,但我的IEnumerable是没有绑定的。 这是我的代码片段: m.ResponseInfo.SubsetInfo.Test) %> <% for (int i = 0; i m.ResponseInfo.SubsetInfo.BandAvailabilities.ToArray()[i].BandName) %> 以下是模型中这些属性的外观: public IEnumerable BandAvailabilities { get; set; } public string Test { get; set; } 视图工作正常,并输出一个文本框列表,其中包含预期值。 但是被解雇的post只会将Test字符串识别为属性。 模型状态也不包含我的IEnumerable数据。

如何在C#中将类作为IEnumerable?

所以我在其中有一个类和一个通用List,但它是私有的。 class Contacts { List contacts; … } 我想让这个课有效: foreach(Contact in contacts) …. ; 像这样(不工作): Contacts c; foreach(Contact in c) …. ; 在上面的示例中,Contact类实例c必须返回联系人的每个项目(c的私有成员) 我该怎么做? 我知道它必须是IEnumerable与yield return,但在哪里声明?

C#中的收益率是否是线程安全的?

我有以下代码: private Dictionary items = new Dictionary; public IEnumerable Keys { get { foreach (object key in items.Keys) { yield return key; } } } 这是线程安全的吗? 如果不是,我必须lock循环或yield return ? 这就是我的意思: Thread1访问Keys属性,而Thread2将一个项添加到基础字典。 Thread1是否受Thread2的影响?

实现自己的LINQ和IEnumerable

在我正在开发的项目中,有非常庞大的集合(1M-1B元素),并且事物大部分被修改为集合。 这是一个实时应用程序,因此性能至关重要。 对于某些操作,如Reverse,BinarySearch(可能的?)等会比Select等更多的操作受到影响。 是否可以使用可能的MoveNext,MovePrev等实现自己的IEnumerable,并拥有利用这些优势的已实现的LINQ扩展? 如果发生这种情况,它将在项目结束时发生。 因为我们需要先让它工作,然后加快速度。 总而言之,这不应该是太多的工作,对吧?

使用IEnumerable 返回类型的SQL数据是否有任何陷阱?

我的问题是关于SQL连接状态,负载等基于以下代码: public IEnumberable GetMyTypeObjects() { string cmdTxt = “select * from MyObjectTable”; using(SqlConnection conn = new SqlConnection(connString)) { using(SqlCommand cmd = new SqlCommand(cmdTxt, conn)) { conn.Open(); using(SqlDataReader reader = cmd.ExecuteReader()) { while(reader.Read()) { yield return Mapper.MapTo(reader); } } } } yield break; } 我可以看到这可能是一个问题,如果有许多进程在IEnumerable对象的迭代之间运行类似的代码,执行时间长,因为连接将打开更长时间等等。但是,这似乎也可能会减少CPU使用率在SQL服务器上,因为它只在使用IEnumerable对象时返回数据。 它还降低了客户端上的内存使用量,因为客户端只需在其工作时加载一个MyType实例,而不是加载所有出现的MyType(通过迭代整个DataReader并返回List或其他内容)。 您是否有任何实例可以想到您不希望以这种方式使用IEnumerable,或者您认为它完全适合的任何实例? 这会给SQL服务器带来什么样的负载? 这是你在自己的代码中使用的东西(除非提到NHibernate,Subsonic等)吗? –