草庐IT

ienumerator

全部标签

c# - 多次读取 IEnumerable

假设我有一些代码:varitems=ItemsGetter.GetAllItems().Where(x=>x.SomeProperty>20);intsum1=items.Sum(x=>x.SomeFlag==true);例如,我需要稍后在代码中从items集合中获取一些其他金额。intsum2=items.Sum(x=>x.OtherFlag==false);所以我的问题是:可以多次调用IEnumerable上的Linq方法吗?也许我应该在枚举器上调用Reset()方法或使用ToList方法从项目中创建列表? 最佳答案 嗯,这真的

c# - IEnumerable<T> 到 CSV 文件

我正在从LINQ查询中获取类型为IEnumerable的var的结果我想根据LINQ的结果创建一个CSV文件我从下面的查询中得到结果varr=fromtableinmyDataTable.AsEnumerable()orderbytable.Field(para1)grouptablebynew{Name=table[para1],Y=table[para2]}intoResultTableselectnew{Name=ResultTable.Key,Count=ResultTable.Count()}; 最佳答案 检查这个publ

c# - Fluent Assertions 能否对 IEnumerable<string> 使用不区分字符串的比较?

我有一对列表,我正在尝试使用FluentAssertions进行比较。我可以很容易地编写比较代码,但我想使用FluentAssertions,这样我就可以获得在测试失败消息中显示的原因。到目前为止,我所看到的一切似乎都在使用默认的Object.Equals比较,它区分大小写。我似乎无法将IComparer传递给Equal或Contains方法,还有其他方法吗?[TestMethod()]publicvoidfoo(){varactual=newList{"ONE","TWO","THREE","FOUR"};varexpected=newList{"One","Two","Three"

c# - IEnumerable<T> 线程安全?

我有一个填充List的主线程.此外,我创建了一个将在不同线程上执行的对象链,需要访问列表。原始列表生成后将永远不会被写入。我的想法是将列表传递为IEnumerable到在其他线程上执行的对象,主要是为了不允许那些实现这些对象的人错误地写入列表。换句话说,如果保证不写入原始列表,多线程使用.Where是否安全?或foreach在IEnumerable上?如果原始集合从未更改,我不确定迭代器本身是否是线程安全的。 最佳答案 IEnumerable无法修改。那么什么可以是非线程安全的呢?(如果您不修改实际的List)。对于非线程安全,您需

c# - 将列表类型转换为 IEnumerable 接口(interface)类型

我有一个Listpersonlist;我怎样才能转换成IEnumerableiPersonListPerson实现IPerson接口(interface) 最佳答案 如果您使用的是.NET4.0或更高版本,您可以只进行隐式转换:IEnumerableiPersonList=personlist;//orexplicit:variPersonList=(IEnumerable)personlist;这在IEnumerable中使用了通用逆变-即因为你只能从IEnumerable中得到一些out,你可以隐式转换IEnumerable至I

c# - 使用迭代器编写自定义 IEnumerator<T>

如何编写自定义IEnumerator需要维护一些状态并且仍然可以使用迭代器block来简化它的实现?我能想到的最好的是这样的:publicclassMyEnumerator:IEnumerator{privateIEnumerator_enumerator;publicintPosition{get;privateset;}//orsomeothercustompropertiespublicMyEnumerator(){Position=0;_enumerator=MakeEnumerator();}privateIEnumeratorMakeEnumerator(){//yield

c# - 从枚举转换为 IEnumerable

你能帮我修改这段代码吗usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Reflection;namespaceNTSoftHRM{//------------------------------------------------------------------------publicclassEnumValueList:IEnumerable{//--------------------------------------------------------------

c# - 将 IEnumerable<int> 转换为 int[]

如何在C#中将IEnumerable变量转换为int[]变量? 最佳答案 如果您能够使用System.Linq,请使用.ToArray()扩展方法如果您使用的是.Net2,那么您可以只是扯掉System.Linq.Enumerable实现.ToArray扩展方法的方式(我已经提升了代码这里几乎是逐字逐句-它需要Microsoft®吗?):structBuffer{internalTElement[]items;internalintcount;internalBuffer(IEnumerablesource){TElement[]a

c# - 查明 IEnumerable<> 是否具有唯一值的最佳方法

我有很多代码可以做这样的事情boolGetIsUnique(IEnumerablevalues){returnvalues.Count()==values.Distinct().Count;}有没有更好更快更好的方法来做到这一点? 最佳答案 我会让它成为一个很好的扩展方法publicstaticboolIsUnique(thisIEnumerablelist){varhs=newHashSet();returnlist.All(hs.Add);}检查是否所有项目都可以添加到HashSet。

c# - 为什么 IEnumerable<T> 不实现 Add(T)?

现在偶然发现,Add(T)定义在ICollection中,而不是IEnumerable.Enumerable.cs中的扩展方法不包含Add(T),我认为这真的很奇怪。由于一个对象是可枚举的,它必须“看起来像”一个项目的集合。谁能告诉我为什么? 最佳答案 安IEnumerable只是一个元素序列;将其视为仅向前游标。因为很多这些序列都从数据库中生成值、数据流或记录集,所以Add没有任何意义。项目给他们。 关于c#-为什么IEnumerable不实现Add(T)?,我们在StackOverf