草庐IT

ienumerable

全部标签

c# - 返回 ICollection<T> 而不是 List<T> 的真正优势是什么?

这个问题在这里已经有了答案:关闭13年前。我读过几篇博文,其中提到对于公共(public)API,我们应该始终返回ICollection(或IEnumerable)而不是List。返回ICollection而不是List的真正优势是什么?谢谢!重复:WhatisthedifferencebetweenList(ofT)andCollection(ofT)?

c# - 继承的通用类型统一

对于这样的场景:publicinterfaceIAnimal{}publicinterfaceIGiraffe:IAnimal{}publicinterfaceIQuestionableCollection:IEnumerable{voidSomeAction();}publicinterfaceIQuestionableCollection:IQuestionableCollection,IEnumerablewhereT:IAnimal{}publicclassQuestionableCollection:IQuestionableCollectionwhereT:IAnimal{

c# - LINQ IEnumerable 扩展是否在其 IEnumerable 上调用 Dispose?

假设我已经编写了一个实现IEnumerable的类,并返回一个IEnumerator,它不仅仅是IDisposable的枚举器,但是在完成枚举后,由于拥有它需要Dispose()的托管资源,我是否可以相信只要我的枚举器正确,以下将Dispose()这些托管资源在其IDisposable实现中处理这些托管资源?return(newMyClass()).Select(x=>x);编辑:这个问题看起来与标记为类似它的一个模组相似,但它在语义上是不同的IMO(我在提出问题之前看到了它) 最佳答案 是的,您可以从LINQ方法内部对迭代器调用D

c# - 实现 IEnumerable<T> 的自定义集合的 Json.net 序列化

我有一个实现IEnumerable的集合类,但我在反序列化其序列化版本时遇到了问题。我正在使用Json.netv4.0.2.13623这是我的集合类的简化版本,可以说明我的问题publicclassMyType{publicintNumber{get;privateset;}publicMyType(intnumber){this.Number=number;}}publicclassMyTypes:IEnumerable{privatereadonlyDictionaryc_index;publicMyTypes(IEnumerableseed){this.c_index=seed.

c# - 使用自定义流 (IEnumerable<T>)

我正在使用Stream的自定义实现这将流式传输IEnumerable成一个流。我正在使用这个EnumerableStream实现以执行转换。我正在使用它以流式传输模式通过WCF执行流式传输。我能够转换IEnumerable到流没有问题。有一次,我在客户端,我可以反序列化并获取所有数据,但是我无法找到停止循环我的流的条件。我得到:System.Runtime.Serialization.SerializationException:EndofStreamencounteredbeforeparsingwascompleted.这是我要实现的示例示例:classProgram{public

c# - 如果我将 IQueryable 转换为 IEnumerable 然后调用 Linq 扩展方法,将调用哪个实现?

考虑以下代码:IQueryablequeryable;//somethingtoinstantiatequeryablevarenumerable=(IEnumerable)queryable;varfiltered=enumerable.Where(i=>i>3);在最后一行,调用了哪个扩展方法?是IEnumerable.Where(...)吗?或者将IQueryable.Where(...)被调用是因为实际的实现显然仍然是可查询的?大概理想的情况是调用IQueryable版本,就像普通多态性将始终使用更具体的覆盖一样。虽然在VisualStudio中,当我右键单击Where方法并“

c# - 检查 IEnumerable<T> 是否不包含重复项(= 不同)的快速方法

是否有快速内置方法来检查IEnumerable只包含不同的字符串?一开始我是这样开始的:varenumAsArray=enum.ToArray();if(enumAsArray.Length!=enumAsArray.Distinct().Count())throw...但是,这看起来像是O(2n)-是吗?ToArray()可能是O(1)?这看起来更快:varset=newHashSet();foreach(varstrinenum){if(!set.Add(str))throw...}这应该是O(n),但是,是否也有内置方法?编辑:也许Distinct()在内部使用它?解决方案:在考

c# - 使这项工作起作用的流畅对象模型是什么?

作为编写流畅API的练习,我想我会编译并运行以下代码:staticvoidMain(string[]args){Enumerable.Range(1,100).When(i=>i%3==0).Then(i=>Console.WriteLine("fizz")).When(i=>i%5==0).Then(i=>Console.WriteLine("buzz")).Otherwise(i=>Console.WriteLine(i)).Run();Console.ReadLine();}想法是.When将测试枚举中的每个元素,如果它通过谓词,则运行操作。如果谓词失败,则该项目沿链向下传递。我

c# - F# 屈服! operator - 实现和可能的 C# 等价物

我目前正在学习F#,我非常喜欢yield!(yield-bang)运算符。不仅因为它的名字,当然也因为它的作用。yield!运算符基本上允许您从序列表达式中产生序列的所有元素。这对于组合枚举器很有用。因为我经常遇到大而复杂的枚举器,所以我对我们可以用来将它们分解并由更简单的枚举器组合起来的策略很感兴趣。不幸的是,yield!运算符在C#中不可用。据我所知,它的作用类似于foreach(varxinsource)yieldx;但我正在阅读的书(Petricek'sRealWorldF#-Manning)表明它具有更好的性能......那么F#编译器在这里究竟做了什么?(是的,我也可以使用

c# - 如何使用 ADO.NET 返回 IEnumerable<>?

我一直在使用Dapper,对于我当前的项目,我将不得不使用ADO.NET。我的问题是如何使用ADO.NET返回IEnumerable?这是我使用Dapper的结果。有人可以帮助我将其转换为使用ADO执行相同的操作吗?publicIEnumerableGetFavorites(){using(SqlConnectionsqlConnection=newSqlConnection(connString)){sqlConnection.Open();varwork=sqlConnection.Query("Select*fromfavorites");returnwork;}}