草庐IT

ienumerator

全部标签

C#:如何使 IEnumerable<T> 线程安全?

假设我有这个简单的方法:publicIEnumerableGetNumbers(){uintn=0;while(n你如何使这个线程安全?我的意思是,您将获得该枚举器一次,并让多个线程处理所有数字,而不会出现重复数字。我想某处需要使用锁,但该锁必须在哪里才能使迭代器block是线程安全的?一般来说,如果你想要线程安全,你需要记住什么IEnumerable?或者更确切地说,我猜这将是一个线程安全的IEnumerator...? 最佳答案 这样做存在一个固有的问题,因为IEnumerator兼有MoveNext()和Current.你真的

C#:如何使 IEnumerable<T> 线程安全?

假设我有这个简单的方法:publicIEnumerableGetNumbers(){uintn=0;while(n你如何使这个线程安全?我的意思是,您将获得该枚举器一次,并让多个线程处理所有数字,而不会出现重复数字。我想某处需要使用锁,但该锁必须在哪里才能使迭代器block是线程安全的?一般来说,如果你想要线程安全,你需要记住什么IEnumerable?或者更确切地说,我猜这将是一个线程安全的IEnumerator...? 最佳答案 这样做存在一个固有的问题,因为IEnumerator兼有MoveNext()和Current.你真的

c# - 为什么 .net 中的数组只实现 IEnumerable 而不是 IEnumerable<T>?

我正在实现自己的ArrayList类,当我意识到这一点时感到很惊讶publicSystem.Collections.Generic.IEnumeratorGetEnumerator(){return_array.GetEnumerator();}没用。数组不在.NET中实现IEnumerator的原因是什么?有什么解决方法吗?谢谢 最佳答案 数组确实实现了IEnumerable,但它是作为CLI对数组的特殊知识的一部分完成的。这就像它是一个显式实现一样工作(但不是:它是在运行时完成的)。许多工具不会显示此实现,这在Remarks中有

c# - 为什么 .net 中的数组只实现 IEnumerable 而不是 IEnumerable<T>?

我正在实现自己的ArrayList类,当我意识到这一点时感到很惊讶publicSystem.Collections.Generic.IEnumeratorGetEnumerator(){return_array.GetEnumerator();}没用。数组不在.NET中实现IEnumerator的原因是什么?有什么解决方法吗?谢谢 最佳答案 数组确实实现了IEnumerable,但它是作为CLI对数组的特殊知识的一部分完成的。这就像它是一个显式实现一样工作(但不是:它是在运行时完成的)。许多工具不会显示此实现,这在Remarks中有

c# - IEnumerable 和顺序

我对IEnumerable中的order有疑问。据我所知,遍历IEnumerable是伪代码,可以写成下面的方式:while(enumerable.HasNext()){objectobj=enumerable.Current;...}现在,假设需要对一个已排序集合进行操作。在这种情况下可以使用IEnumerable还是尝试具有索引支持的其他方式(即IList)更好?换句话说:IEnumerable的合约是否对一般顺序做出任何保证?因此,IEnumerable不是保证排序的通用接口(interface)的正确方法。新的问题是什么接口(interface)或类应该用于有顺序的不可变集合?

c# - IEnumerable 和顺序

我对IEnumerable中的order有疑问。据我所知,遍历IEnumerable是伪代码,可以写成下面的方式:while(enumerable.HasNext()){objectobj=enumerable.Current;...}现在,假设需要对一个已排序集合进行操作。在这种情况下可以使用IEnumerable还是尝试具有索引支持的其他方式(即IList)更好?换句话说:IEnumerable的合约是否对一般顺序做出任何保证?因此,IEnumerable不是保证排序的通用接口(interface)的正确方法。新的问题是什么接口(interface)或类应该用于有顺序的不可变集合?

c# - LINQ - 在 IEnumerable 中选择第二个项目

我有string[]pkgratio="1:2:6".Split(':');varitems=pkgratio.OrderByDescending(x=>x);我想选择中间值并想出了这个。这是在IEnumberable中选择第二个值的正确方法吗?pkgratio.Skip(1).Take(1).First(); 最佳答案 虽然您的工作有效,但最直接的方法是使用数组的索引并引用第二项(在索引1处,因为第一个元素的索引从零开始):pkgratio[1]Console.WriteLine(pkgratio[1]);一个更完整的例子:str

c# - LINQ - 在 IEnumerable 中选择第二个项目

我有string[]pkgratio="1:2:6".Split(':');varitems=pkgratio.OrderByDescending(x=>x);我想选择中间值并想出了这个。这是在IEnumberable中选择第二个值的正确方法吗?pkgratio.Skip(1).Take(1).First(); 最佳答案 虽然您的工作有效,但最直接的方法是使用数组的索引并引用第二项(在索引1处,因为第一个元素的索引从零开始):pkgratio[1]Console.WriteLine(pkgratio[1]);一个更完整的例子:str

c# - 在 ASP.NET MVC 中使用带有 IEnumerable 模型的自定义编辑器模板的正确、惯用的方法

Thisquestionisafollow-upforWhyismyDisplayFornotloopingthroughmyIEnumerable?快速刷新。时间:该模型具有类型为IEnumerable的属性您将此属性传递给Html.EditorFor()使用只接受lambda表达式的重载您有一个类型为T的编辑器模板在Views/Shared/EditorTemplates下然后MVC引擎将自动为可枚举序列中的每个项目调用编辑器模板,生成结果列表。例如,当有一个模型类时Order有属性(property)Lines:publicclassOrder{publicIEnumerable

c# - 在 ASP.NET MVC 中使用带有 IEnumerable 模型的自定义编辑器模板的正确、惯用的方法

Thisquestionisafollow-upforWhyismyDisplayFornotloopingthroughmyIEnumerable?快速刷新。时间:该模型具有类型为IEnumerable的属性您将此属性传递给Html.EditorFor()使用只接受lambda表达式的重载您有一个类型为T的编辑器模板在Views/Shared/EditorTemplates下然后MVC引擎将自动为可枚举序列中的每个项目调用编辑器模板,生成结果列表。例如,当有一个模型类时Order有属性(property)Lines:publicclassOrder{publicIEnumerable