我已经定义了一个可以通用方式实现的接口(interface)。返回类型必须是一个集合,而输入参数可以是类或值。
public interface IDataRetriever<T, C> where T : ICollection<string>
{
T GetData(C criteria);
}
当我尝试返回一个列表时,出现错误“类型参数 T 不能与 as 操作一起使用,因为它没有类类型。” 尝试删除“as T”,但这也不起作用。
如果我替换 where 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;
}
}
最佳答案
as
期望 T 是引用(或可空)类型,这意味着对类的约束也应包含在您的签名中。
public interface IDataRetriever<T, C>
where T : ICollection<string>, class
{
T GetData(C criteria);
}
正如 Jason 在评论中提到的,如果 T 不是字符串类型或从 T 派生的类型,则返回 null。但是,由于您的约束指定您期望 ICollection<T>
是字符串,这似乎可以接受,因为您的问题目前已写好。
关于c# - 返回作为 C# 中的集合的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30314385/