You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite泛型类调用Query方法报错:‘T’需非抽象无参构造类型求解

问题排查与修复

核心问题分析

你遇到的错误有两个根源:

  1. 方法级泛型参数冗余:AddData<T>和GetDB<T>中重新声明了泛型参数<T>,这会覆盖类级的T,导致方法内的T不受任何约束,而SQLite的Query<T>等方法要求泛型参数必须满足特定条件。
  2. 缺少泛型约束:SQLite的CreateTable<T>、Insert<T>、Query<T>方法都要求泛型类型T是非抽象、拥有公共无参构造函数的引用类型,你的类级泛型T没有添加这些约束,导致无法满足SQLite方法的要求。

修复后的代码

public class DB_Processor_Generic<T> where T : class, new()
{
    private SQLite.SQLiteConnection _db;
    private string _path;

    // 构造函数
    public DB_Processor_Generic(string path)
    {
        _path = path;
        _db = new SQLite.SQLiteConnection(this._path);
        _db.CreateTable<T>();
    }

    // 添加数据方法(移除冗余的方法级泛型参数)
    public void AddData(T t1)
    {
        _db.Insert(t1);
    }

    // 查询数据方法(移除冗余的方法级泛型参数)
    public List<T> GetDB(string tableName)
    {
        var DB_List = _db.Query<T>($"SELECT * FROM {tableName}");
        return DB_List;
    }
}

关键修复点说明

  • 添加类级泛型约束:where T : class, new()确保T是引用类型,且拥有公共无参构造函数,完全满足SQLite方法的参数要求。
  • 移除方法级泛型参数:方法直接使用类级的T即可,无需重复声明,避免泛型参数混淆,同时自动继承类级的约束。

内容的提问来源于stack exchange,提问作者Eric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:27:36