草庐IT

ienumerable

全部标签

c# - 为什么不接受 IEnumerable(of T) 作为扩展方法接收器

在代码前完成问题:为什么是IEnumerablewhereT:ITest不被接受为期望thisIEnumerable的扩展方法的接收者?现在是代码:我有三种类型:publicinterfaceITest{}publicclassElement:ITest{}publicclassElementInfo:ITest{}还有两种扩展方法:publicstaticclassExtensions{publicstaticIEnumerableMethod(thisIEnumerablecollection)whereT:ITest{→returncollection.ToInfoObjects

c# string[] 与 IEnumerable<string>

如果我在运行前就知道元素的数量,我应该选择什么?Resharper为我提供IEnumerable而不是string[]? 最佳答案 ReSharper建议IEnumerable如果您只使用为IEnumerable定义的方法。它这样做的想法是,由于您显然不需要将值键入为数组,因此您可能希望对消费者(即使用的代码)隐藏确切的类型值,因为您将来可能想更改类型。在大多数情况下,采纳建议是正确的做法。差异将不是您在程序运行时可以观察到的东西;相反,它取决于您将来对程序进行更改的难易程度。从上面你也可以推断出整个建议/问题是没有意义的,除非我们

c# - IEnumerable 和良好实践(和 WCF)

使用IEnumerable是一种好的做法吗?当您实际上不需要添加或删除东西而只是枚举它们时,是否在整个应用程序范围内?附带问题:您在返回IEnumerable时遇到过任何问题吗?来自WCF服务?这会给客户端应用程序带来问题吗?毕竟,我认为这将被序列化为一个数组。 最佳答案 我倾向于只返回IEnumerable当我想向调用者暗示实现可能使用惰性求值时。否则,我通常会返回IList或ICollection,并实现为ReadOnlyCollection如果结果应该是只读的。惰性评估可能是一个重要的考虑因素:如果您的实现可以抛出异常,则在调

c# - LINQ IEnumerable 的序列化结果

我有一个简单的值类型:[Serializable]privatestructTimerInstance{publicTimerInstance(stringstr,longnTicks){_name=str;_ticks=nTicks;}privatereadonlystring_name;privatereadonlylong_ticks;publicstringName{get{return_name;}}publiclongTicks{get{return_ticks;}}publicoverridestringToString(){returnstring.Format("{0

c# - 为什么 List<double> 显式转换为 IEnumerable<object> 会抛出异常?

根据这个MSDNreferenceIEnumerable是协变的,这可以将对象列表隐式转换为可枚举对象:IEnumerablestrings=newList();IEnumerableobjects=strings;在我自己的代码中,我写了一行代码,当列表的项目类型是Point类时,它可以完美运行(Point是一个简单的类,具有三个双x、y、z属性):varobjects=(IEnumerable)dataModel.Value;//herepropertyValueisalistthatcouldbeofanytype.但是当列表的项类型为double时,上面的代码返回以下异常:Un

c# - 我可以使用 Linq 从 IEnumerables 构建元组吗?

我有两个IEnumerables,我想构建一个IEnumerable的Tuple从。Item1的Tuple应该是项目的索引,Item2第一个集合中第index个位置的值,以及Item3第二个集合中第index个位置的值。这在Linq中可以轻松完成吗?例如varfirst=newList(){10.0,20.0,30.0};varsecond=newList(){1.0,2.0,3.0};varresult=TupleBuild(first,second);//result={(0,10.0,1.0),(1,20.0,2.0),(2,30.0,3.0)}哪里:IEnumerable>Tu

c# - 如何将多个 IEnumerable 列表组合在一起

我有一个具有IEnumerable属性的类(ClassA)。然后我有另一个具有相同属性的类(ClassB)。他们共享一个接口(interface)(InterfaceA)。ClassB基本上是多个ClassA的容器类。如何实现ClassB的属性。interfaceInterfaceA{IEnumerableMyInts{get;}}classClassA:InterfaceA{publicIEnumerableMyInts{get;privateset;}}classClassB:InterfaceA{ClassA[]classAs=newClassA[10];publicIEnume

c# - 从只能迭代一次的 IEnumerable 获取头部和尾部

我有一个元素序列。序列只能迭代一次,可以“无限”。获取这样一个序列的头部和尾部的最佳方法是什么?更新:如果我在原始问题中包含一些说明,那就更好了:)头是序列的第一个元素,尾是“其余”。这意味着尾部也是“无限”的。当我说无限时,我的意思是“非常大”和“我不想一次将它全部存储在内存中”。它也可能实际上是无限的,例如传感器数据(但它不是我的情况)。当我说它只能迭代一次时,我的意思是生成序列会占用大量资源,所以我不想再重复一次。它也可能是volatile数据,再次像传感器数据,在下次读取时不会相同(但在我的情况下不是)。 最佳答案 分解IE

c# - Entity Framework 存储过程 - 使用 CodeFirst 的多个结果集

我正在使用以下代码从存储过程中获取常规结果:varparamUserId=newSqlParameter{ParameterName="userId",Value=userId};stringquery=string.Format("{0}{1}","SpSetFoo","@userId");varresults=context.Database.SqlQuery(query,paramUserId);result=results.ToList();与此同时,我需要从另一个存储过程中检索多个结果集,根据此文档我发现这是可能的:http://msdn.microsoft.com/en-u

c# - 如何使用 LINQ 转置二维集合中的维度?

考虑以下结构:IEnumerable>collection=new[]{new[]{1,2,3},new[]{4,5,6},new[]{7,8,9}};如何枚举此集合以获得IEnumerable由第一项、第二项等组成的集合?即{1,4,7},{2,5,8},...(虽然我选择的实现是int[]对象,但假设您只有IEnumerable功能。谢谢。) 最佳答案 这是一种使用生成器而不是递归的方法。数组构造也较少,因此它可能更快,但这完全是推测。publicstaticIEnumerable>Transpose(thisIEnumerab