gpt4 book ai didi

c# - Null OR 泛型作为参数方法

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:32 25 4
gpt4 key购买 nike

在 Java 中你可以这样做:

protected void makeRequest<T extends BaseJsonClass, T2 extends BaseJsonClass> (Response<T> response, T2 dataToSend, String url) {}

一些请求:

makeRequest(response, null, serverUrl);
makeRequest(response, jsonData, serverUrl);

在 C# 中如何?

我正在编写一个方法,它应该能够接受数据为 null 或作为特定类型的对象。

/**
* Make a request to the server.
* dataToSend can be null.
* */
protected void makeRequest<T, T2>(Response<T> response, T2 dataToSend, string url) where T : JsonObjectBase where T2 : JsonObjectBase
{ }

目前我遇到的问题:

The type arguments for method `BaseModelController.makeRequest<T,T2>(Response<T>, T2, string)'
cannot be inferred from the usage. Try specifying the type arguments explicitly

我如何允许一个也可能为 null 的泛型?

** 编辑 1 **我这样调用这个方法:
makeRequest(response, null, serverUrl);
或者
makeRequest(response, someJsonData, serverUrl);

** 编辑 2 **

JsonObjectBase 只是一个由其他 Json 类扩展的对象,因此我可以神奇地自动解析/序列化它们,因为我知道它始终是一个 Json 对象。我用它来进行类型检查,这样其他编码人员就不会犯输入未知对象的错误。
传递 null 确实比定义“假设”不做任何事情的相同值要好得多;因为那很快就会变得困惑。

权力的例子

ModelControllerAccount.getInstance().createUser(
username.text, password.text, // Params
new Response<JsonUserAccountFeedback>(
success: (jsonObjectStandardResponse) => Debug.Log("Success when creating account. Data: " + jsonObjectStandardResponse.getAccessToken()),
failed: (failedReason) => Debug.Log("Failed to make request. Reason: " + failedReason.getReasonDescription())
)
);

最佳答案

如果您可以稍微更改 API,解决此问题的一种简单方法是添加省略第二个参数的重载。在您不发送任何数据的情况下,这对调用者来说也更容易。

像这样:

protected void makeRequest<T>(Response<T> response, string url) where T : JsonObjectBase 
{
makeRequest (response, default(JsonObjectBase), url);
}

关于c# - Null OR 泛型作为参数方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38041049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com