使用泛型类型&#39; System.Collections.Generic.IEnumerable <t>需要1个类型参数</t>

时间:2015-02-04 06:29:38

标签: c#

我在C#中的代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace cs
{
    public class TreeNode<T> : IEnumerable
    {
    }

我在这里得到了错误:

  

错误1使用泛型类型'System.Collections.Generic.IEnumerable<T>'需要1个类型参数

5 个答案:

答案 0 :(得分:18)

接口IEnumerableSystem.Collections中声明,因此应添加以下内容:

using System.Collections;

还有一个类似的接口IEnumerable<T>,它是IEnumerable的通用版本,并且在System.Collections.Generic中声明了一个,这就是Visual Studio为您提供如此神秘错误的原因。

答案 1 :(得分:4)

IEnumerable有两个“版本”。

一个是非通用System.Collections.IEnumerable。为了向后兼容性,这主要是提供。我真的没有想到让新类直接继承它的好理由。

另一个是通用的,System.Collections.Generic.IEnumerable<T>。这也实现了IEnumerable,因此在所有情况下都是更好的选择。

当接口具有泛型重载时,您需要指定该泛型类型参数。在你的情况下,

public class TreeNode<T> : IEnumerable<T>

值得注意的是,实现这一点时,您需要实现两种方法:

Enumerator<T> GetEnumerator(); // From IEnumerable<T>
Enumerator IEnumerable.GetEnumerator(); // From IEnumerable

从第二个返回this.GetEnumerator()并不是太不寻常,因为再次提供 作为向后兼容性。你总是希望这两个枚举器返回相同的数据,这是一个很好的简单解决方案。

答案 2 :(得分:2)

您需要

  • 使用IEnumerable的非通用版本,该版本位于System.Collection命名空间(您未包含)
  • 指定通用版本的类型(更有可能)

通用版本的示例:

class TreeNode<T> : IEnumerable<T> 
{....}

答案 3 :(得分:0)

您应该使用:

System.Collections.IEnumerable

而不是

IEnumberableSystem.Collections.Generic.IEnumerable

答案 4 :(得分:0)

添加以下标题

using System.Collections;