草庐IT

ienumerable

全部标签

c# - 业务逻辑或 DAL 返回类型的 IEnumerable 与 IQueryable

我知道以前有人问过这些问题,我将首先列出其中的一些(到目前为止我已经阅读过的):IEnumerablevsIQueryableList,IList,IEnumerable,IQueryable,ICollection,whichismostflexiblereturntype?ReturningIEnumerablevs.IQueryableIEnumerableasreturntypehttps://stackoverflow.com/questions/2712253/ienumerable-and-iqueryableViewswithbusinesslogicvscodeWPF

c# - 为什么 List<T> 实现 IList<T>、ICollection<T> 和 IEnumerable<T>?

如果你去定义List你会看到以下内容:publicclassList:IList,ICollection,IEnumerableIList已经继承自ICollection和IEnumerable.如果List还不够吗?仅实现IList? 最佳答案 是的,在这种情况下没有区别。在某些情况下,它可以有所作为,如果您使用的基类已经实现了一个接口(interface),但您希望自己显式地重新实现它——但在这种情况下,没有基类(除了隐式object),它的行为方式完全相同。与我的记忆相反,我认为无论代码是否显式声明所有接口(interface

c# - IEnumerable<T> 与数组

我想弄明白,将对象的只读列表发布为公共(public)方法的最佳方式是什么?来自EricLippert'sBlog,数组有点糟糕,因为有人可以轻松添加新条目。因此,每次调用该方法时都必须传递一个新数组。他建议,通过IEnumerable,因为这是只读定义(没有添加、删除方法),我已经练习了很长时间。但在我们的新项目中,人们甚至开始创建这些IEnumerables的数组,因为他们不知道背后的数据源,所以他们得到一个:HandlingwarningforpossiblemultipleenumerationofIEnumerable我对一种技术方法很感兴趣,即如何解决这个难题。到目前为止我

c# - 调试 IEnumerable 方法

我有一个返回IEnumerable的方法我正在尝试调试该方法中的代码。每次我在调试期间在VisualStudio中逐步执行代码时,它都会跳过有问题的方法。当我在方法中放置一个断点时,它永远不会被击中。正如我通过yieldreturn测试的那样,代码肯定在运行从该方法中获取假T。是否无法通过这种方式调试IEnumerable方法,还是我做错了什么? 最佳答案 只有当您使用IEnumerable中的项目时,该方法才会被调用。请记住,IEnumerable延迟加载项目,因此仅仅因为您正在调用返回IEnumerable的方法,并不意味着该方

c# - 向 IEnumerable<T> 添加一项的最佳方法是什么?

下面是我将一个项目添加到IEnumerable对象的方法://SomeIEnumerableobjectIEnumerablearr=newstring[]{"ABC","DEF","GHI"};//Addoneitemarr=arr.Concat(newstring[]{"JKL"});这很尴尬。但是,我没有看到类似ConcatSingle()的方法。是否有更简洁的方法将单个项目添加到IEnumerable对象? 最佳答案 不,这与使用内置语言/框架功能一样简洁。如果你愿意,你总是可以创建一个扩展方法:arr=arr.Append

c# - 在空 IEnumerable<int> 上为 FirstOrDefault() 返回 null?

假设我有以下片段:int?nullableId=GetNonNullableInts().FirstOrDefault();因为GetNonNullableInts()返回整数,FirstOrDefault将默认为0。有没有办法让整数列表中的FirstOrDefault在列表为空时返回null值? 最佳答案 int?nullableId=GetNonNullableInts().Cast().FirstOrDefault(); 关于c#-在空IEnumerable上为FirstOrDef

c# - 枚举上的 IEnumerable 扩展方法

我有一个枚举(如下),我希望能够在其上使用LINQ扩展方法。enumSuit{Hearts=0,Diamonds=1,Clubs=2,Spades=3}Enum.GetValues(...)的返回类型为System.Array,但我似乎无法访问ToList()扩展或任何其他此类内容。我只是想写点像...foreach(SuitsinEnum.GetValues(typeof(Suit)).Select(x=>x).Where(x=>x!=param)){}我是否遗漏了什么,或者有人可以向我解释为什么这不可能吗?谢谢。 最佳答案 En

c# - 如何处理 "infinite"IEnumerable?

“无限”IEnumerable的一个简单示例是IEnumerableNumbers(){inti=0;while(true){yieldreturnunchecked(i++);}}我知道,那个foreach(intiinNumbers().Take(10)){Console.WriteLine(i);}和varq=Numbers();foreach(intiinq.Take(10)){Console.WriteLine(i);}两者都工作正常(并打印出数字0-9)。但是在复制或处理像q这样的表达式时有什么陷阱吗?我可以相信他们总是被评价为“懒惰”吗?产生死循环有什么危险吗?

c# - 使用 C# 创建 IEnumerable<KeyValuePair<string, string>> 对象?

出于测试目的,我需要创建一个IEnumerable>具有以下示例键值对的对象:Key=Name|Value:JohnKey=City|Value:NY最简单的方法是什么? 最佳答案 任何一个:values=newDictionary{{"Name","John"},{"City","NY"}};或values=new[]{newKeyValuePair("Name","John"),newKeyValuePair("City","NY")};或:values=(new[]{new{Key="Name",Value="John"},n

c# - IEnumerable 到 IReadOnlyCollection

我有IEnumerable并且需要传递给一个方法作为参数但是这个方法需要IReadOnlyCollection是否可以转换IEnumerable至IReadOnlyCollection? 最佳答案 一种方法是构造一个列表,然后调用AsReadOnly()在上面:IReadOnlyCollectionrdOnly=orig.ToList().AsReadOnly();这会产生ReadOnlyCollection,它实现了IReadOnlyCollection.注意自List工具IReadOnlyCollection同样,调用AsRea