jjzjj

IEnumerable

全部标签

c# - 事件与产量

我有一个多线程应用程序,它为多个硬件仪器生成线程。每个线程基本上是一个无限循环(在应用程序的生命周期内)轮询硬件以获取新数据,并在每次收集新数据时激活一个事件(传递数据)。有一个单一的监听器类整合了所有这些仪器,执行一些计算,并通过该计算触发一个新事件。但是,我想知道,既然只有一个监听器,是否公开一个IEnumerable会更好?关闭这些仪器的方法,并使用yieldreturn返回数据,而不是触发事件。我想看看是否有人知道这两种方法的区别。特别是,我正在寻找最佳可靠性、最佳暂停/取消操作能力、最佳线程目的、一般安全性等。此外,使用第二种方法是否仍然可以运行IEnumerable在单独的

c# - 使用 Parallel.ForEach() 的 yield return 的线程安全

考虑以下代码示例,它创建一个可枚举的整数集合并并行处理它:usingSystem.Collections.Generic;usingSystem.Threading.Tasks;publicclassProgram{publicstaticvoidMain(){Parallel.ForEach(CreateItems(100),item=>ProcessItem(item));}privatestaticIEnumerableCreateItems(intcount){for(inti=0;i是否保证Parallel.ForEach()生成的工作线程每个都获得不同的项目,或者是否需要一

c# - 是什么原因导致此列表在以一种方式调用时通过引用传递,但通过另一种方式传递值?

我正在做一个运行验证方法的简单测试,遇到了这种奇怪的情况。publicIEnumerableints(Listl){if(false)yieldreturn6;l.Add(4);}voidMain(){vara=newList();varb=newList();for(inti=0;i此代码运行后,a将包含[0,1,2,3,4]。但是,b将包含[0,1,2,3]。为什么在AddRange中将方法作为参数调用允许通过引用传递列表?或者,如果那没有发生,那发生了什么? 最佳答案 ints(b)调用不枚举IEnumerable,所以代码永

c# - 如何使用 Linq 搜索分层数据

我需要在树中搜索可能位于树中任何位置的数据。如何使用linq完成此操作?classProgram{staticvoidMain(string[]args){varfamilyRoot=newFamily(){Name="FamilyRoot"};varfamilyB=newFamily(){Name="FamilyB"};familyRoot.Children.Add(familyB);varfamilyC=newFamily(){Name="FamilyC"};familyB.Children.Add(familyC);varfamilyD=newFamily(){Name="Fam

c# - IEnumerable<IGrouping> 到 IEnumerable<List>

所以我有这个:IEnumerable>groupedObjects=myObjectsResults.GroupBy(x=>x.Id);问题是,如何将此结果转换为IEnumerable>?这是我所能接受的:IEnumerable>groupedObjects=(myObjectsResults.GroupBy(x=>x.Id).SelectMany(group=>group).ToList());这显然是不正确的。有什么想法吗? 最佳答案 IEnumerable>groupedObjects=myObjectsResults.Gro

c# - 语法 : return _(); IEnumerable<TSource> _() 的含义

这个问题在这里已经有了答案:Oddreturnsyntaxstatement(2个答案)关闭5年前。在下面的C#代码中,我发现_()的用法很奇怪。谁能解释一下这是什么意思?publicstaticIEnumerableDistinctBy(thisIEnumerablesource,FunckeySelector,IEqualityComparercomparer){if(source==null)thrownewArgumentNullException(nameof(source));if(keySelector==null)thrownewArgumentNullExceptio

c# - 将 C# 集合拆分为相等的部分,保持排序

我正在尝试将一个集合拆分为多个集合,同时保持我对集合的排序。我尝试使用以下扩展方法,但它错误地破坏了它们。基本上,如果我要查看集合中的项目,与合并的分解集合相比,顺序应该相同。这是我正在使用但不起作用的代码:publicstaticIEnumerable>Split(thisIEnumerablelist,intparts){inti=0;varsplits=fromnameinlistgroupnamebyi++%partsintopartselectpart.AsEnumerable();returnsplits;}intparts=子枚举数 最佳答案

c# - IEnumerable<int> 还需要非通用 IEnumerator 吗?

3个问题:1)为什么输出取自NON泛型函数?2)为什么我必须同时实现非泛型函数?3)如果我想查看通用函数输出(int的),我需要做什么? 最佳答案 foreach关键字不需要集合来实现IEnumerable根本;相反,它会调用任何已定义的GetEnumerator方法。IEnumerable工具IEnumerable出于兼容性原因。你应该实现IEnumerable.GetEnumerator()显式地让普通方法返回IEnumerator.如果类(class)有正常的GetEnumerator()方法(与显式接口(interface)

c# - 在 TPL 数据流中使用 async/await 和 yield return

我正在尝试使用TPLDataflow实现数据处理管道.但是,我对数据流比较陌生,并不完全确定如何正确使用它来解决我要解决的问题。问题:我正在尝试遍历文件列表并处理每个文件以读取一些数据,然后进一步处理该数据。每个文件大概是700MB至1GB在尺寸方面。每个文件包含JSON数据。为了并行处理这些文件而不是运行内存,我正在尝试使用IEnumerable与yieldreturn然后进一步处理数据。获得文件列表后,我想同时处理最多4-5个文件。我的困惑来自:如何使用IEnumerable和yeildreturn与async/await和数据流。偶遇thisanswer通过svick,但仍然不确

c# - 在 .NET 正则表达式中高效组合 MatchCollection

在简化示例中,有两个正则表达式,一个区分大小写,另一个不区分大小写。这个想法是有效地创建一个IEnumerable集合(参见下面的“组合”)组合结果。stringtest="abcABC";stringregex="(?a)|(?b)|(?c)]";RegexregNoCase=newRegex(regex,RegexOptions.IgnoreCase);RegexregCase=newRegex(regex);MatchCollectionmatchNoCase=regNoCase.Matches(test);MatchCollectionmatchCase=regCase.Mat