gpt4 book ai didi

c# - 在 Xamarin 中使用 SQLite 数据库的 C# 类中的另一个泛型中使用泛型类型

转载 作者:太空宇宙 更新时间:2023-11-03 20:58:47 25 4
gpt4 key购买 nike

我有一个简单的数据库控件处理程序类。

它使用了一个SQLiteConnection。我的 SQLite 数据库中有几个表。

现在我想为所有使用 int Id 作为主键的特定类型的表编写一个通用的简单访问器函数。因此,我有一个基类 TableWithIntId,它始终有一个 int Id 作为主键。

我的简化代码是:

private SQLiteConnection sqliteConnection;

public T LoadRecord<T>(int id) where T : Database.TableWithIntId
{
try
{
return (from objTable in sqliteConnection.Table<T>()
where objTable.Id == id
select objTable).First();
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return null;
}
}

问题是,我收到以下错误:

错误 CS0310:“T”必须是具有公共(public)无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“SQLiteConnection.Table()”中的参数“T”

这让我感到困惑,因为 T 是非抽象的并且有一个自动默认构造函数。

public class TableWithIntId
{
[PrimaryKey]
public int Id { get; set; }
}

最佳答案

约束 where T : Database.TableWithIntId 仅声明 T 必须派生自 Database.TableWithIntId。但是派生类不一定具有无参数构造函数(如果您只为它们提供带参数的构造函数)。

添加 new()解决这个问题的约束:

public T LoadRecord<T>(int id) where T : Database.TableWithIntId, new()

这将 T 限制为具有无参数构造函数的类。

关于c# - 在 Xamarin 中使用 SQLite 数据库的 C# 类中的另一个泛型中使用泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47865777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com