Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将类转换为泛型类型_C#_Templates_Generics_Asp.net Web Api_Types - Fatal编程技术网

C# 如何将类转换为泛型类型

C# 如何将类转换为泛型类型,c#,templates,generics,asp.net-web-api,types,C#,Templates,Generics,Asp.net Web Api,Types,我有一个方法调用api服务来获得一些结果,方法的返回类型是类类型。对于单个类,我可以指定name作为其返回类型和工作状态。但在某些情况下,返回类型会发生更改。在那个场景中,我陷入了继续代码的困境。请指导我如何实现这一目标 预期解决方案: 我希望在GetDoc中添加if条件。。详细信息类中的方法。根据docType,我需要将GetRequestRecords更改为GetRequestEmployee public Class Details{ public async Task<IActio

我有一个方法调用api服务来获得一些结果,方法的返回类型是类类型。对于单个类,我可以指定name作为其返回类型和工作状态。但在某些情况下,返回类型会发生更改。在那个场景中,我陷入了继续代码的困境。请指导我如何实现这一目标

预期解决方案: 我希望在GetDoc中添加if条件。。详细信息类中的方法。根据docType,我需要将GetRequestRecords更改为GetRequestEmployee

public Class Details{
public async Task<IActionResult> GetDoc(string docType){

var result= await _apiService.GetRequest<Records>(  //in some cases i need to change 'Records' to 'Employee'
url,//api url
...
)

}
}
----------
public class Record{
public Record(int id, string name){
ID=id;
Name=name
}
public int ID{get; set;}
public string Name{get;set;
}

public class Employee{
public Record(int id, string name){
ID=id;
Name=name
}
public int ID{get; set;}
public string Name{get;set;
}

public class ApiService{

public async Task<IactionResult> GetRequest<T>(string url, ....){
// here i am deserializing the response content using jsonconvert.
}

}



我建议为每个实体创建不同的端点,而不是像您正在接近的那样,因为这看起来是一个端点,可以获取不同实体的详细信息。比如说:

public class RecordController
{
    public async Task<IActionResult> GetDetails(int id)
    {
        var result = await _apiService.GetRequest<Record>(id);
        // Rest of the processing...
    }
}
然后,员工的另一个控制器:

public class EmployeeController
{
    public async Task<IActionResult> GetDetails(int id)
    {
        var result = await _apiService.GetRequest<Employee>(id);
        // Rest of the processing...
    }
}
如果其余逻辑允许,您可以进一步创建一个通用控制器,如:

public abstract class MyBaseController<T>
{
    public virtual async Task<IActionResult> GetDetails(int id)
    {
        var result = await _apiService.GetRequest<T>(id);
        // Rest of the processing...
        // If the processing is not generic you may be able to use a delegate to handle that bit.
    }
}
现在,在各个控制器中,您可以继承如下内容:

public class RecordController : MyBaseController<Record>
{
}


实际上没有测试这个。刚刚草拟了代码,为您提供了设计类的思路。

您可以使用if…else基于docType值…如何使用公共异步任务GetDocstring docType和_apiService.GetRequest…例如,仅我提供了、Record和Employee。。但它可以是5个不同的类。@JeroenvanLangen我正在从类型脚本调用瘦细节类。有可能有GetDoc吗?。我还没试过这样做。我要试试这个。Thanks@shobia我相信转换声明是实现这一目标的方法。谢谢你的建议。
public class EmployeeController : MyBaseController<Employee>
{
}