更新:2007 年 11 月

错误消息

foreach 语句不能对“type”类型的变量进行操作,因为它实现“interface”的多个实例化,请尝试强制转换为特定的接口实例化

此类型从 IEnumerator<T> 的两个或更多的实例继承,这意味着此类型不存在 foreach 可以使用的唯一枚举。指定 IEnumerator<T> 的类型,或使用其他循环构造。

示例

下面的示例生成 CS1640:

 复制代码
// CS1640.cs

using System;
using System.Collections;
using System.Collections.Generic;

public class C : IEnumerable, IEnumerable<int>, IEnumerable<string>
{
    IEnumerator<int> IEnumerable<int>.GetEnumerator()
    {
        yield break;
    }

    IEnumerator<string> IEnumerable<string>.GetEnumerator()
    {
        yield break;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return (IEnumerator)((IEnumerable<string>)this).GetEnumerator();
    }
}

public class Test
{
    public static int Main()
    {
        foreach (int i in new C()){}    // CS1640

        // Try specifing the type of IEnumerable<T>
        // foreach (int i in (IEnumerable<int>)new C()){}
        return 1;
    }
}