首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型'T‘必须是引用类型,才能用作泛型类型或方法'QueryAPI.Query<T>()中的参数'T’。

类型'T‘必须是引用类型,才能用作泛型类型或方法'QueryAPI.Query<T>()中的参数'T’。
EN

Stack Overflow用户
提问于 2018-04-23 08:24:25
回答 1查看 962关注 0票数 0

我正在编写一些代码,这些代码应该在不同的远程对象上使用公共逻辑更新一些字段。因此,我使用给定的API。测试类是我自己的实现。另外两个类由API提供。当我编写下面的代码时,我会得到错误

代码语言:javascript
复制
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic type or method 'QueryAPI.Query<T>()

代码:

代码语言:javascript
复制
 public class Test<T> where T : class, UnicontaBaseEntity
    {
        private async Task Foo<T>(QueryAPI queryAPI, CrudAPI crudAPI, SyncSettings syncSettings)
        {
            Task<T[]> result = await queryAPI.Query<T>();
        }
    }

    public interface UnicontaBaseEntity : UnicontaStreamableEntity
    {
        int CompanyId { get; }

        Type BaseEntityType();
    }


    public class QueryAPI : BaseAPI
    {
        ...
        public Task<T[]> Query<T>() where T : class, UnicontaBaseEntity, new();
        ...
    }

对此有什么想法吗?

提前谢谢。

KR迈克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-23 08:33:37

我将在这里从T中删除Foo(),因为父类Test<T>已经是泛型的。

您还应该添加一个new()约束,否则会出现另一个错误,因为QueryAPI需要一个具有默认构造函数的类型。

此外,一些重命名包含Async也是合适的。

代码语言:javascript
复制
public class Test<T> where T : class, UnicontaBaseEntity, new()
{
    private async Task FooAsync(QueryAPI queryAPI, CrudAPI crudAPI, SyncSettings syncSettings)
    {
        Task<T[]> result = await queryAPI.QueryAsync<T>();
    }
}

public interface UnicontaBaseEntity : UnicontaStreamableEntity
{
    int CompanyId { get; }

    Type BaseEntityType();
}


public class QueryAPI : BaseAPI
{
    ...
    public Task<T[]> QueryAsync<T>() where T : class, UnicontaBaseEntity, new()
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49976483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档