【问题标题】:Getting '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获取“T”必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法中将其用作参数“T”
【发布时间】:2020-07-21 15:24:21
【问题描述】:

我对 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”必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“SQLiteAsyncConnection.Table&lt;T&gt;()”中的参数“T

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

【问题讨论】:

    标签: c# generics generic-programming


    【解决方案1】:

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

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

    【讨论】:

    • 对不起,如果我真的很天真,但你能帮我更好地理解这一点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多