我定义了一个可以以通用方式实现的接口。返回类型必须是集合,而输入参数可以是类或值。
public interface IDataRetriever<T, C> where T : ICollection<string>
{
T GetData(C criteria);
}
当我尝试返回一个List时,出现了一个错误:“由于它没有类类型,因此类型参数T不能与as操作一起使用。” 尝试删除“as T”,但也不起作用。
如果我将
T:ICollection<string>
替换为List<string>
,它就可以工作。这里有什么不正确的?public class CustomADataRetrieverImpl<T, C>: IDataRetriever<T, C>
where T : ICollection<string>
{
public T GetData(C criteria)
{
string myCriteria = criteria as string;
ICollection<string> data = new List<string>()
...
return data as T;
}
}
data as T
对于任何不是List<string>
或其派生类型的T
都会返回 null。 - Jason Watkins