首页 > 解决方案 > 获取“T”必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法中将其用作参数“T”

问题描述

我对 C# 有点陌生,我看过一些关于如何进行泛型处理的示例,但我找不到通俗易懂的示例

我将分享我想要做什么,请以简单的语言输入任何内容,我们将不胜感激

static readonly Lazy<SQLiteAsyncConnection> lazyInitializer = new Lazy<SQLiteAsyncConnection>(() =>
    {
        return new SQLiteAsyncConnection(Constants.DatabasePath, Constants.Flags);
    });

    public static SQLiteAsyncConnection Database => lazyInitializer.Value;

    public async Task<List<T>> GetItemsAsync<T>()
    {
        var data = await Database.Table<T>().ToListAsync();
        return data;
        //return Database.Table<TodoItem>().ToListAsync();
    }

我收到一个错误

T”必须是具有公共无参数构造函数的非抽象类型,才能T在泛型类型或方法“ ”中将其用作参数“ SQLiteAsyncConnection.Table<T>()

我一直在 C# 中经历这个Generic,但我很难理解

标签: c#genericsgeneric-programming

解决方案


的类型参数存在泛型类型约束Table<T>。然后,您必须确保您引入的要使用的任何新泛型类型参数Table<T>都具有匹配(或更严格)的类型约束。在这里,这是new()约束

public async Task<List<T>> GetItemsAsync<T>() where T: new()
{
    var data = await Database.Table<T>().ToListAsync();
    return data;
    //return Database.Table<TodoItem>().ToListAsync();
}

推荐阅读