[英]Generic method with sqlite-net
我想創建一個簡單的存儲庫,下面是我使用的方法:
public static List<T> GetAll()
{
return _dbConnection.Table<T>().ToList();
}
但我遇到一個錯誤: 'T' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'SQLite.SQLiteConnection.Table<T>()'
我使用SQLite
包裝器sqlite-net
。
我的班級是通用的:
class FeedRepository<T> : IFeedRepository<T>, IDisposable where T : IFeed
錯誤是不言自明的。 T
必須有一個公共無參數構造函數。 以下可以幫助您
where T : new()
這聽起來像你只需要另一個約束添加到T
-在Table<T>()
方法似乎希望new()
的約束 ,因此,您需要到添加到您的約束列表太:
class FeedRepository<T> : IFeedRepository<T>, IDisposable where T : IFeed, new()
在這一點上,編譯器會知道, T
你的類類型參數滿足的約束T
的類型參數Table
的方法,它應該是罰款。 當然,這意味着任何使用FeedRepository<T>
類的人都只能使用帶有公共構造函數的非抽象類型...但這是你想要實現的自然限制。
顯然, Table<T>
方法的類型約束為new()
。 但是, FeedRepository<T>
的泛型類型參數沒有這樣的約束,因此您無法在Table<T>
直接使用它。
您需要在FeedRepository<T>
添加一個FeedRepository<T>
:
class FeedRepository<T> : IFeedRepository<T>, IDisposable where T : IFeed, new()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.