访问类型<从方法中的类(公共类class)传入
本文关键字:class 传入 方法 访问类型 | 更新日期: 2023-09-27 18:07:42
例如,我有一个类:
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
T
在您的方法中被识别。问题是不同的。它不适合您试图调用的Get
方法的通用约束集。
'T'必须是具有公共无参数构造函数的非抽象类型,以便将其用作泛型类型或方法'
AppCore.NHibernateBases.DataRepositories.Interfaces.IDataRepository.Get<T>(int)
'中的参数'T'
要做到这一点,您必须在您的类中添加相同的约束:
public class GenericController<T> : ApiController where T : BaseContext, new()
错误说明了一切,您缺少了一个约束。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();
}
}