如何指定泛型类型的标识符类型(对于数据库查询)以及泛型类型

时间:2010-02-16 12:47:46

标签: c# generics repository

我正在考虑在决定业务线存储库之前实现每个对象存储库(例如人员存储库,状态存储库等)但是我仍然有关于传入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。

2 个答案:

答案 0 :(得分:2)

删除where TID : Type约束。这应该可以解决问题。

答案 1 :(得分:1)

IQueryable no。伊丽莎白是的。数组是依赖。 IList是安全的。

你的TID约束是说TID的类型是Type。

放弃。