簡體   English   中英

使用sqlite-net的通用方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM