我正在考慮在決定業務線庫之前實現按對象存儲庫(例如Person存儲庫,State存儲庫等)相反,但我仍然有一個關於通過一個ID(標識符)類型與一個通用的問題。如何指定泛型類型的標識符類型(用於db查詢)以及genric類型
簡而言之,一個人可能有一個GUID標識符,州/縣可能有一個int標識符等。記住這一點,我該如何傳遞一個類型來指定ID,呃,類型泛型被傳入?
這是我在界面的嘗試:
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是類(人,國家等),我的意圖是讓TID是用於標識類型,即查看T Get(TID id)。
這樣做會產生編譯錯誤:「類型'字符串'不能用作泛型類型或方法'DumpWebApp.IRepository'中的類型參數'TID'。'string'沒有隱式引用轉換。 '系統類型'。」
這樣做的另一種方法是將實際的元素傳遞給Get和Delete方法,我猜,但看起來有點笨拙。
感謝您的任何建議 - 順便說一句,返回IList可以接受的GetAll()?爲什麼不是IQueryable或T []?
邁克K.
好的,這就像一個魅力,我認爲這是變化?謝謝你的指針:-) – 2010-02-16 12:58:38
@Mike:不,與方差無關。使用'Type'作爲通用約束不是「任何類型」的簡寫。 'System.Type'是它自己的獨特類。如果你想允許任何類型的'TID',那麼就完全跳過這個約束。 – LukeH 2010-02-16 13:14:20
好的,那麼<>中的第二個參數究竟代表什麼?我猜這是通用的類型,很明顯,但想知道這個問題... – 2010-02-16 14:02:05