如何使用 Nullable <T?> 调用方法

use*_*704 0 .net c# api

我正在为 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)”的类型参数。尝试明确指定类型参数。

Ren*_*ogt 5

你被限制T为一个值类型Call<T>

private ApiCallResponse<T?> Call<T>(ApiCallInput input) where T : struct
Run Code Online (Sandbox Code Playgroud)

所以,你还需要contrainTCallExternalAPI<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?>.