草庐IT

ienumerator

全部标签

c# - 我如何告诉 Resharper 我的 IEnumerable 方法删除了空值?

给定以下代码,Resharper将正确地警告我foo.Bar上可能存在的NullReferenceException,因为可枚举中可能有空元素:IEnumerablefoos=GetFoos();varbars=foos.Select(foo=>foo.Bar);满足静态分析器的一种方法是显式排除空值:IEnumerablefoos=GetFoos().Where(foo=>foo!=null);我发现自己经常输入.Where(x=>x!=null),所以我将其包装在扩展方法中,现在我可以执行以下操作:IEnumerablefoos=GetFoos().NotNull();问题是Res

c# - 实现 IEnumerable 和 IEnumerator 的原因是什么

这个问题在这里已经有了答案:WhatisthedifferencebetweenIEnumeratorandIEnumerable?[duplicate](4个答案)关闭8年前。我正在准备我的C#考试。我对这个问题的答案感到困惑:AprogramcanusetheIEnumerableandIEnumeratorinterfacestodowhichofthefollowing?a.UseMoveNextandResettomovethroughalistofobjects.b.Useforeachtomovethroughalistofobjects.c.Movethroughali

c# - nest yields to return IEnumerable<IEnumerable<T>> with lazy evaluation

我写了一个LINQ扩展方法SplitBetween类似于String.Split.>newList(){3,4,2,21,3,2,17,16,1}>.SplitBetween(x=>x>=10)[3,4,2],[3,2],[],[1]来源://partitionsequenceintosequenceofcontiguoussubsequences//behaveslikeString.SplitpublicstaticIEnumerable>SplitBetween(thisIEnumerablesource,FuncseparatorSelector,boolincludeSepa

c# - 默认模型绑定(bind)器不绑定(bind) IEnumerable 中的 Nullable 类型

我有一个Controller操作,其定义如下所示-publicActionResultChangeModel(IEnumerableinfo,long?destinationId)和模型:publicclassMyModel{publicstringName;//Getspopulatedbydefaultbinderpubliclong?SourceId;//remainsnullthoughthevalueissetwheninvoked}'Name'属性在Controller操作中被填充,但是SourceId属性保持为空。destinationId是一个long?参数也会被填充。

c# - 在哪些情况下我需要为 IEnumerable 和 IQueryable 创建两种不同的扩展方法?

假设我需要一个扩展方法,它只从不同的来源中选择所需的属性。源可以是数据库或内存中的集合。所以我定义了这样的扩展方法:publicIQueryableSelectDynamic(thisIQueryablesource,...)这适用于IQueryable。但是,我还必须为IEnumerable调用此函数。在这种情况下,我可以在.AsQueryable()的帮助下调用它:myEnumerable.AsQueryable().SelectDynamic(...).ToList();两者都很好。如果两者都正常工作,在哪些条件下我必须为同一目的创建两种不同的扩展方法,一种用于IEnumerab

c# - 将 IEnumerable 参数传递给 WebAPI

我正在开始使用WebAPI,大部分情况下一切进展顺利。我遇到了一个特定功能的问题。这个与另一个不同,因为它的唯一参数是IEnumerable类型。我在Post()函数的第一行设置了一个断点,我正在点击该函数,但“值”参数的计数始终为0。我验证了该参数进入客户端实际上,确实包含一个整数数组。如果我删除[FromUri]属性,“values”参数为NULL而不是计数0。如何让我的整数数组通过我的WebAPI函数?这是WebAPI函数:[System.Web.Mvc.HttpPost]publicvoidPost([FromUri]IEnumerablevalues){if(values==

c# - yield 返回与返回 IEnumerable<T>

我注意到在我无法理解的using语句中从IDataReader读取时有些奇怪。虽然我确信答案很简单。为什么在using(SqlDataReaderrd){...}中,如果我直接执行yieldreturn,读取器会在整个过程中保持打开状态读。但是,如果我执行直接return调用SqlDataReader扩展方法(如下所述),而读取器在实现可枚举之前关闭?publicstaticIEnumerableEnumerate(thisSqlDataReaderrd){while(rd.Read())yieldreturnrd.ConvertTo();//extensionmethodwrappi

c# - 对 IEnumerable<T> 以外的类型(monads?)进行操作的 LINQ 查询表达式——可能的用途?

我正在看书Real-worldfunctionalprogrammingbyTomasPetricekandJonSkeet我很难消化关于计算表达式的部分1)(又名monad)。通过这本书,我了解到—与我以前的经验相反—LINQ查询表达式不限于IEnumerable,但也可以处理其他自定义类型。这对我来说似乎很有趣,我想知道是否存在查询表达式语法(fromxin...select...)非常适合的场景。一些背景信息:显然,此类自定义类型称为计算类型,它们被描述为与monadsinHaskell本质上相同的事物。.我一直无法理解monad到底是什么,但根据这本书,它们是通过称为bind和

c# - 从 IEnumerable 转换为 IEnumerable<object>

我更喜欢使用IEnumerable,因为LINQ扩展方法在其上定义,而不是IEnumerable,这样我就可以使用,例如,range.Skip(2).但是,我也更喜欢使用IEnumerable,对于T[]可隐式转换为IEnumerable是否T是引用类型还是值类型。对于后一种情况,不涉及拳击,这很好。结果,我可以做到IEnumerablerange=new[]{1,2,3}.将两个世界的优点结合起来似乎是不可能的。反正我选择安家IEnumerable并在我需要应用LINQ方法时进行某种转换。来自thisSO线程,我开始知道range.Cast()能够胜任这项工作。但它会产生性能开销,我

c# - 在返回 IEnumerable 的方法中使用锁时,linq 延迟执行

考虑一个由多个线程访问的简单Registry类:publicclassRegistry{protectedreadonlyDictionary_items=newDictionary();protectedreadonlyobject_lock=newobject();publicvoidRegister(intid,stringval){lock(_lock){_items.Add(id,val);}}publicIEnumerableIds{get{lock(_lock){return_items.Keys;}}}}和典型用法:varids1=_registry.Ids;//exe