例如,我有一个班级:
public class GenericController<T> : ApiController where T : BaseContext
{
public string Get(int id)
{
try
{
var obj = dataRepository.Get<T>(id);
responseMessage.SetGetSuccess(obj);
}
catch (Exception e)
{
responseMessage.SetGetUnsuccess(e);
}
return responseMessage.ToJsonString();
}
}
这可能吗? 方法
中无法识别T.错误信息是:
Error 16 '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 'AppCore.NHibernateBases.DataRepositories.Interfaces.IDataRepository.Get<T>(int)' C:\Users\SeanPC\Google Drive\SideProject\DataAPI\DataAPI\Controllers\GenericController.cs 44 27 DataAPI
答案 0 :(得分:2)
T
在您的方法中得到认可。问题不同。它不适合您试图调用的Get
方法的通用约束集。
&#39; T&#39;必须是具有公共无参数构造函数的非抽象类型才能将其用作参数&#39; T&#39;通用类型或方法&#39;
AppCore.NHibernateBases.DataRepositories.Interfaces.IDataRepository.Get<T>(int)
&#39;
要实现这一目标,您必须在班级中添加相同的约束:
public class GenericController<T> : ApiController where T : BaseContext, new()
答案 1 :(得分:1)
错误说明了一切,你错过了一个约束。 Get<T>
方法需要一个not abstract
类型且具有无参数构造函数的类型。
为了能够将T
类型传递给Get
,您必须更改约束:
public class GenericController<T> : ApiController where T : BaseContext, new()
{
public string Get(int id)
{
try
{
var obj = dataRepository.Get<T>(id);
responseMessage.SetGetSuccess(obj);
}
catch (Exception e)
{
responseMessage.SetGetUnsuccess(e);
}
return responseMessage.ToJsonString();
}
}