С# 约束泛型不起作用并且令人脑残



我很困惑。我如何创建该类的示例?此错误说:类型"type1"不能用作泛型类型或方法"中的类型参数"T"。没有从"类型1"到"类型2"的隐式引用转换。但是我哪里做错了?

public interface IMyList<T>
{
void Add(T a);
T this[int index] { get; }
int Count { get; }
void Clear();
bool Contains(T item);
}
public class Mylist<T> where T: IMyList<T>
{
public T this[int index]
{
get { return this[index]; }
}
public List<T> array = null;
public int Count()
{
int a = 0;
foreach (var item in array)
{
a++;
}
return a;
}
public Mylist()
{
this.array = new List<T>(0);

}
public void Add(T a)
{
array.Add(a);
}
public void Clear()
{
throw new NotImplementedException();
}
public bool Contains(T item)
{
throw new NotImplementedException();
}
}

class Program
{
static void Main()
{
IMyList<int> list = new Mylist<IMyList<int>>() as IMyList<int>; //cs0311
Mylist<IMyList<int>> mylist = new Mylist<IMyList<int>>(); //cs0311
//a.Add(1);
//Console.WriteLine(a.Count());
}
}

public class Mylist<T> where T: IMyList<T>行是错误的。您要做的是将类型T限制为IMyList<T>。这种递归类型约束不起作用。你真正想做的是实现接口IMyList<T>。此处根本不需要类型约束。正确的行是public class MyList<T> : IMyList<T>

您的代码还有其他一些问题;我冒昧地纠正了它们:

using System;
using System.Collections.Generic;
namespace Example
{
public interface IMyList<T>
{
void Add(T a);
T this[int index] { get; }
int Count { get; }
void Clear();
bool Contains(T item);
}
public class MyList<T> : IMyList<T>
{
public T this[int index]
{
get { return this[index]; }
}
public List<T> array = null;
public int Count
{
get
{
int a = 0;
foreach (var item in array)
{
a++;
}
return a;
}
}
public MyList()
{
this.array = new List<T>(0);
}
public void Add(T a)
{
array.Add(a);
}
public void Clear()
{
throw new NotImplementedException();
}
public bool Contains(T item)
{
throw new NotImplementedException();
}
}

class Program
{
static void Main()
{
IMyList<int> list = new MyList<int>();
list.Add(1);
Console.WriteLine(list.Count);
}
}
}

我测试了这段代码,它的编译没有错误或警告。

最新更新