我正在编写一些代码,这些代码应该在不同的远程对象上使用通用逻辑更新某些字段。因此我使用给定的API。 Test Class是我自己的实现。其他两个类由API提供。 当我写下面的代码时,我得到错误
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>()
代码:
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 麦克
答案 0 :(得分:0)
我会从T
移除Foo()
,因为您的父类Test<T>
已经是通用的。
您还应该添加new()
约束,否则会出现另一个错误,因为QueryAPI需要一个具有默认构造函数的类型。
此外,有些重命名要包括Async
。
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()
...
}