我在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个类型参数
答案 0 :(得分:18)
接口IEnumerable
在System.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
而不是
IEnumberable
或System.Collections.Generic.IEnumerable
答案 4 :(得分:0)
添加以下标题
using System.Collections;