我正在考虑在决定业务线存储库之前实现每个对象存储库(例如人员存储库,状态存储库等)但是我仍然有关于传入ID(标识符)的问题用通用类型。
简而言之,Person可能有一个GUID标识符,State / County可能有一个int标识符等。考虑到这一点,我如何传递一个指定ID,er,类型的类型被传入?
这是我对界面的尝试:
public interface IRepository<T, TID> where T : class where TID : Type
{
T Get(TID id);
IList<T> GetAll();
void Update(T entity);
void Insert(T entity);
void Delete(TID id);
}
你可以看到T是类(Person,State等),我的意图是让TID成为用于标识符的类型,即查看T Get(TID id)。
这解决了编译错误:“类型'字符串'不能用作泛型类型或方法'DumpWebApp.IRepository'中的类型参数'TID'。没有从'string'到'的隐式引用转换的System.Type”。“
另一种方法是将实际元素传递给Get和Delete方法,我猜,但这看起来有点笨拙。
感谢您提出任何建议 - 顺便说一句,回复IList可以接受GetAll()吗?为什么不IQueryable,或T []?
Mike K。
答案 0 :(得分:2)
删除where TID : Type
约束。这应该可以解决问题。
答案 1 :(得分:1)
IQueryable no。伊丽莎白是的。数组是依赖。 IList是安全的。
你的TID约束是说TID的类型是Type。
放弃。