gpt4 book ai didi

c# - "object is enumerated"在 C# 中是什么意思?

转载 作者:行者123 更新时间:2023-12-05 01:27:14 24 4
gpt4 key购买 nike

我最近一直在阅读有关延迟执行、LINQ、一般查询等的文章和文档,并且经常出现短语“对象被枚举”。有人可以解释枚举对象时会发生什么吗?

示例 article .

This method is implemented by using deferred execution. The immediate return value is an object that stores all the information that is required to perform the action. The query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C#

最佳答案

枚举的一般解释

IEnumerable是一个接口(interface),通常由 C# 中的集合类型实现。例如List , QueueArray .

IEnumerable提供方法GetEnumerator它返回 IEnumerator 类型的对象.

IEnumerator基本上表示指向集合中元素的“向前移动指针”。 IEnumerator有:

  • 属性(property) Current ,它返回它当前指向的对象(例如,您集合中的第一个对象)。
  • 一个方法MoveNext , 它将指针移动到下一个元素。调用之后,Current将保存对您集合中下一个对象的引用。 MoveNext将返回 false如果集合中没有更多元素。

每当一个foreach循环在 IEnumerable 上执行, IEnumerator通过 GetEnumerator 检索和 MoveNext每次迭代都会调用 - 直到它最终返回 false .您在循环 header 中定义的变量填充了 IEnumeratorCurrent .


编译foreach循环

感谢@Llama

这段代码...

List<int> a = new List<int>();
foreach (var val in a)
{
var b = 1 + val;
}

被编译器转化为这样的东西:

List<int> list = new List<int>();
List<int>.Enumerator enumerator = list.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
int current = enumerator.Current;
int num = 1 + current;
}
} finally {
((IDisposable)enumerator).Dispose();
}

引用

The query represented by this method is not executed until the objectis enumerated either by calling its GetEnumerator method directly orby using foreach in Visual C#.

GetEnumerator一旦将对象放入 foreach 中,就会自动调用循环,例如。当然,其他功能,例如Linq查询,还可以检索IEnumerator从您的收藏中,通过显式(调用 GetEnumerator )或隐含在某种循环中,就像我在上面的示例中所做的那样。

关于c# - "object is enumerated"在 C# 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69581566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com