Questions tagged «ienumerable»

IEnumerable及其通用的IEnumerable <T>是.NET接口,用于迭代(或枚举)项目集合。

3
LINQ是否可以与IEnumerable一起使用?
我有一个实现IEnumerable但没有实现的类IEnumerable&lt;T&gt;。我不能更改此类,也不能使用其他类代替它。正如我从MSDN所了解的,如果使用类实现,则可以使用LINQIEnumerable&lt;T&gt;。我尝试使用instance.ToQueryable(),但是它仍然不启用LINQ方法。我肯定知道该类只能包含一种类型的实例,因此该类可以实现IEnumerable&lt;T&gt;,但事实并非如此。那么,如何使用LINQ表达式查询此类?
86 .net  linq  ienumerable 


7
C#中是否有“空列表”单例?
在C#中,我使用了LINQ和IEnumerable。一切都很好(或至少在大多数情况下是如此)。 但是,在许多情况下,我发现自己需要IEnumerable&lt;X&gt;默认为空。也就是说,我想 for (var x in xs) { ... } 无需空检查即可工作。现在,这是我目前正在执行的操作,具体取决于更大的上下文: var xs = f() ?? new X[0]; // when xs is assigned, sometimes for (var x in xs ?? new X[0]) { ... } // inline, sometimes 现在,虽然上面的内容对我来说非常好-也就是说,如果创建数组对象有任何“额外开销”,我只是不在乎-我想知道: C#/。NET中是否存在“空不变的IEnumerable / IList”单例?(并且即使没有,还有一种“更好”的方式来处理上述情况吗?) Java具有Collections.EMPTY_LIST不可变的单例(即“井井有条”),Collections.emptyList&lt;T&gt;()它可以达到此目的,尽管我不确定类似的概念是否甚至可以在C#中使用,因为泛型的处理方式不同。 谢谢。

4
将两个列表映射到C#中的字典中
给定两个 相同大小的IEnumerables ,如何 使用Linq将其转换为a Dictionary ? IEnumerable&lt;string&gt; keys = new List&lt;string&gt;() { "A", "B", "C" }; IEnumerable&lt;string&gt; values = new List&lt;string&gt;() { "Val A", "Val B", "Val C" }; var dictionary = /* Linq ? */; 预期的输出是: A: Val A B: Val B C: Val C 我想知道是否有一些简单的方法来实现它。 我应该担心表现吗?如果我有大量收藏怎么办? 我没有一种更简单的方法来执行此操作,目前我正在这样做: 我有一个Extension方法,该方法将循环IEnumerable为我提供元素和索引号。 …

5
IEnumerable与IReadonlyCollection与ReadonlyCollection用于公开列表成员
我花了好几个小时思考一下暴露名单成员的话题。在与我类似的问题中,乔恩·斯基特(Jon Skeet)给出了一个很好的答案。请随时查看。 ReadOnlyCollection或IEnumerable用于公开成员集合? 我通常对公开列表非常偏执,尤其是在开发API时。 我一直使用IEnumerable公开列表​​,因为它非常安全,并且具有很大的灵活性。让我在这里使用示例: public class Activity { private readonly IList&lt;WorkItem&gt; workItems = new List&lt;WorkItem&gt;(); public string Name { get; set; } public IEnumerable&lt;WorkItem&gt; WorkItems { get { return this.workItems; } } public void AddWorkItem(WorkItem workItem) { this.workItems.Add(workItem); } } 任何针对IEnumerable进行编码的人在这里都是非常安全的。如果以后我决定使用有序列表或其他东西,它们的代码都不会中断,而且还是不错的。IEnumerable的缺点是可以将其强制转换回此类之外的列表。 因此,许多开发人员使用ReadOnlyCollection公开成员。这是非常安全的,因为它永远都不能返回列表。对我来说,我更喜欢IEnumerable,因为它提供了更多的灵活性,如果我想实现不同于列表的东西的话。 我提出了一个我更喜欢的新主意。使用IReadOnlyCollection: public class Activity { private readonly …


30
您最喜欢的不是内置的LINQ to Objects运算符是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 去年关闭。 改善这个问题 使用扩展方法,我们可以编写方便的LINQ运算符来解决通用问题。 我想听听System.Linq命名空间中缺少哪些方法或重载以及如何实现它们。 最好使用可能使用现有方法的简洁明了的实现。

1
我是否需要考虑处置我使用的任何IEnumerable <T>?
它最近向我指出,各种LINQ的扩展方法(如Where,Select等)返回IEnumerable&lt;T&gt;,恰巧也有IDisposable。以下评估为True new int[2] {0,1}.Select(x =&gt; x*2) is IDisposable 我是否需要处理Where表达式的结果? 每当我调用返回的方法时,完成操作后IEnumerable&lt;T&gt;,我是否(潜在地)承担对处置的责任?
70 c#  linq  ienumerable  dispose 


10
C#是否具有IsNullOrEmpty用于List / IEnumerable?
我知道通常空列表比NULL更可取。但是我将返回NULL,主要有两个原因 我必须显式检查并处理null值,以避免bug和攻击。 ??之后很容易执行操作以获得返回值。 对于字符串,我们有IsNullOrEmpty。有什么从C#本身做了列表或IEnumerable的同样的事情?


3
IQueryable,List,IEnumerator之间的区别?
我想知道IQueryable,List,IEnumerator和什么时候应该使用每一个之间有什么区别? 例如,当使用Linq到SQL时,我将执行以下操作: public List&lt;User&gt; GetUsers() { return db.User.where(/* some query here */).ToList(); } 现在,我想知道是否应该使用IQueryable。我不确定在列表中使用它的好处。

10
为什么IEnumerable <T> .ToList <T>()返回List <T>而不是IList <T>?
扩展方法ToList()返回List&lt;TSource&gt;。按照相同的模式,ToDictionary()返回Dictionary&lt;TKey, TSource&gt;。 我很好奇为什么这些方法没有分别按IList&lt;TSource&gt;和键入其返回值IDictionary&lt;TKey, TSource&gt;。这似乎更奇怪,因为将ToLookup&lt;TSource, TKey&gt;其返回值键入为接口而不是实际的实现。 通过使用dotPeek或其他反编译器查看这些扩展方法的源代码,我们看到以下实现(ToList()由于它更短而显示): public static List&lt;TSource&gt; ToList&lt;TSource&gt;(this IEnumerable&lt;TSource&gt; source) { if (source == null) throw Error.ArgumentNull("source"); return new List&lt;TSource&gt;(source); } 那么,为什么此方法将其返回值键入接口的特定实现而不是接口本身呢?唯一的变化是返回类型。 我很好奇,因为IEnumerable&lt;&gt;扩展名的签名非常一致,除了这两种情况。我一直认为这有点奇怪。 另外,为了使事情更加混乱,状态文档ToLookup(): 根据指定的键选择器函数从IEnumerable创建查找。 但返回类型为ILookup&lt;TKey, TElement&gt;。 在Edulinq中,Jon Skeet提到返回类型是,List&lt;T&gt;而不是IList&lt;T&gt;,但不再涉及主题。 广泛的搜索没有得到任何答案,所以在这里我问你: 不将返回值键入为接口背后有任何设计决定,还是偶然?

1
转换IAsyncEnumerable到列表
因此,在C#8中,我们增加了IAsyncEnumerable接口。 如果我们有一个法线,IEnumerable我们可以制作一个List或几乎任何我们想要的其他收藏。感谢那里的Linq。 var range = Enumerable.Range(0, 100); var list = range.ToList(); 好吧,现在我想异步地将其转换IAsyncEnumerable为a List和this。该情况下已经有Linq实现了吗?如果没有,那我该如何转换呢?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.