访问类型<从方法中的类(公共类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

访问类型<从方法中的类(公共类class<T>)传入

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();
    }
 }