为了账号安全,请及时绑定邮箱和手机立即绑定

foreach循环如何在C#中工作?

foreach循环如何在C#中工作?

C#
温温酱 2019-07-30 15:36:25
foreach循环如何在C#中工作?哪些类可以使用foreach循环?
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

实际上,严格来说,您需要使用的foreach只是一个使用方法和属性GetEnumerator()返回内容的公共方法。但是,最常见的含义是“实现/ ,返回/的东西” 。bool MoveNext()? Current {get;}IEnumerableIEnumerable<T>IEnumeratorIEnumerator<T>

通过暗示,这包括任何实现ICollectionICollection<T>,如像什么Collection<T>List<T>,阵列(T[])等。因此,任何标准的“数据集”将通常支持foreach

为了证明第一点,以下工作正常:

using System;class Foo {
    public int Current { get; private set; }
    private int step;
    public bool MoveNext() {
        if (step >= 5) return false;
        Current = step++;
        return true;
    }}class Bar {
    public Foo GetEnumerator() { return new Foo(); }}static class Program {
    static void Main() {
        Bar bar = new Bar();
        foreach (int item in bar) {
            Console.WriteLine(item);
        }
    }}

它是如何工作的?

foreach(int i in obj) {...}有点类似的foreach循环等同于:

var tmp = obj.GetEnumerator();int i; // up to C# 4.0while(tmp.MoveNext()) {
    int i; // C# 5.0
    i = tmp.Current;
    {...} // your code}

但是,有变化。例如,枚举器(tmp)支持IDisposable,它也被使用(类似于using)。

注意循环中内部(C#5.0)与外部(上升C#4.0)的声明“ int i” 的位置不同。如果您在代码块中使用匿名方法/ lambda,这一点很重要。但那是另一个故事;-pi


查看完整回答
反对 回复 2019-07-30
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

根据Duck Notation博客文章,使用鸭子打字。


查看完整回答
反对 回复 2019-07-30
  • 2 回答
  • 0 关注
  • 371 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信