Мой код в С#:
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 аргумент типа
Интерфейс IEnumerable
объявлен в System.Collections
, поэтому следует добавить следующее:
using System.Collections;
Существует также аналогичный интерфейс, IEnumerable<T>
, который является общей версией IEnumerable и тот объявлен в System.Collections.Generic
и именно поэтому Visual Studio дает вам такую загадочную ошибку.
Есть две "версии" 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()
из второго, так как он снова представлен как обратная совместимость. Вы всегда хотите, чтобы эти два счетчика возвращали одни и те же данные, чтобы было приятное и легкое решение.
Вам либо нужно
IEnumerable
которая находится в пространстве имен System.Collection
(которое вы не указали)Пример для общей версии:
class TreeNode<T> : IEnumerable<T>
{....}
Вы должны использовать:
System.Collections.IEnumerable
вместо
IEnumberable
или System.Collections.Generic.IEnumerable