我正在为 API 调用创建一个包装器。这是返回对象:
public class ApiCallResponse
{
public bool Success { get; set; }
public int StatusCode { get; set; }
public string ErrorMessage { get; set; }
public string ErrorReason { get; set; }
public Exception Exception { get; set; }
}
public class ApiCallResponse<T> : ApiCallResponse
{
public T Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Data 被添加为一个选项,因为有可能(例如,使用 POST)除了状态代码之外我们不会期望任何返回。
然后,我有这个方法:
private ApiCallResponse<T?> Call<T>(ApiCallInput input) where T : struct
{
// do stuff and make the api call
}
Run Code Online (Sandbox Code Playgroud)
这似乎没问题,但我无法弄清楚如何调用此方法。
这个:
public ApiCallResponse<T> CallExternalAPI<T>(ApiCallInput input)
{
return Call<T>(input);
}
Run Code Online (Sandbox Code Playgroud)
给我这个:
类型“T”必须是不可为空的值类型,以便将其用作泛型类型或方法“ApiCall.Call(ApiCallInput)”中的参数“T”
和这个:
public ApiCallResponse CallExternalAPI(ApiCallInput input)
{
return Call(input);
}
Run Code Online (Sandbox Code Playgroud)
给我这个:
无法从用法推断方法“ApiCall.Call(ApiCallInput)”的类型参数。尝试明确指定类型参数。
你被限制T为一个值类型Call<T>
private ApiCallResponse<T?> Call<T>(ApiCallInput input) where T : struct
Run Code Online (Sandbox Code Playgroud)
所以,你还需要contrainT在CallExternalAPI<T>:
public ApiCallResponse<T> CallExternalAPI<T>(ApiCallInput input) where T : struct
Run Code Online (Sandbox Code Playgroud)
编译器需要确保TofCallExternalAPI可以用作 的通用参数Call。
但是,您仍然存在 aApiCallResponse<T?>不可分配给 a 的问题ApiCallResponse<T>。也许这是一个错字,但CallExternalAPI<T>应该声明还返回一个ApiCallResponse<T?>.
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |