草庐IT

ienumerator

全部标签

c# - 是否有语句将元素 T 添加到 IEnumerable<T>

例如:stringelement='a';IEnumerablelist=newList{'b','c','d'};IEnumerablesingleList=???;//singleListyields'a','b','c','d' 最佳答案 我认为您不能直接插入到现有列表中吗?那么,您可以使用new[]{element}.Concat(list)。否则,您可以编写自己的扩展方法:publicstaticIEnumerablePrepend(thisIEnumerablevalues,Tvalue){yieldreturnvalu

c# - 返回 IEnumerable<> 线程安全吗?

我有一个VisualStudio2008C#.NET3.5项目,我希望其中有一个Foo的线程安全池对象。publicclassFooPool{privateobjectpool_lock_=newobject();privateDictionaryfoo_pool_=newDictionary();//...publicvoidAdd(Foof){lock(pool_lock_){foo_pool_.Add(SomeFooDescriminator,f);}}publicFoothis[stringkey]{get{returnfoo_pool_[key];}set{lock(pool

c# - 如何判断 IEnumerable<T> 是否受延迟执行的影响?

我一直假设如果我使用Select(x=>...)在LINQtoobjects的上下文中,新集合将立即创建并保持静态。我不太确定为什么我会这样假设,这是一个非常糟糕的假设,但我做到了。我经常用.ToList()在其他地方,但通常不是在这种情况下。此代码演示了即使是简单的“选择”也会延迟执行:varrandom=newRandom();varanimals=new[]{"cat","dog","mouse"};varrandomNumberOfAnimals=animals.Select(x=>Math.Floor(random.NextDouble()*100)+""+x+"s");fo

c# - 如何对 IEnumerable 列表进行排序?

我有以下列表:IEnumerablecars;Car对象有一个型号和一个年份。我想按型号然后按年份(在型号内)对该列表进行排序。这样做的最佳方法是什么? 最佳答案 varsortedCars=cars.OrderBy(c=>c.Model).ThenBy(c=>c.Year); 关于c#-如何对IEnumerable列表进行排序?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3

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