我定义了可以以通用方式实现的接口。返回类型必须是一个集合,其中输入参数可以是类或值。
public interface IDataRetriever<T, C> where T : ICollection<string>
{
T GetData(C criteria);
}
当我尝试返回列表时,出现错误“类型参数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;
}
}
as
期望T为引用(或可为空)类型,这意味着对类的约束也应包含在签名中。
public interface IDataRetriever<T, C>
where T : ICollection<string>, class
{
T GetData(C criteria);
}
正如Jason在评论中提到的,如果T是字符串类型或从T派生的类型以外的其他任何东西,则将返回null。但是,由于您的约束条件指定您希望ICollection<T>
是字符串,因此这是可以接受的,因为您当前正在编写问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句