【发布时间】:2018-11-15 13:09:11
【问题描述】:
我想将对象反序列化为给定的类类型,具体取决于 ajax 响应是否成功。
于是我写了如下方法:
public IAjaxResponse GetResponse<TOk, TFail>()
{
var responseJson = this.response as Dictionary<string, object>;
object obj = null;
if ((string)responseJson["status"] == "ok")
obj = JsonConvert.DeserializeObject<TOk>(responseJson);
else
obj = JsonConvert.DeserializeObject<TFail>(responseJson);
return (IAjaxResponse)obj;
}
现在使用起来非常简单:
var response = GetResponse<ClassWhenOk, ClassWhenFail>();
if (response is ClassWhenFail responseFail) {
Error.Show(responseFail.message);
return;
}
[..]
现在我的问题是:有时,有些通用响应恰好总是“正常”状态,所以我不想使用第二种类型的参数来表示失败状态。
所以我想使用类似的东西:
\/ notice one type argument
GetResponse<ClassWhenOk>();
这是不允许的,因为使用这个泛型方法需要 2 个类型参数。
那么我的问题来了:
我能否以某种方式将第二个类型参数 (TFail) 标记为“不需要”?还是我应该选择不同的方法?
【问题讨论】:
-
传递一个
null值怎么样? -
2 个函数在这里似乎是合适的方法。
-
如果我在你的鞋子里,我创建一个带有状态字段的超类并将孔对象包装到一个类中
-
@MahdiFarhani 我认为这不会改变任何事情,我也不能在那里使用“条件”类型参数。
-
@LoztInSpace 是的,我只是想知道,因为我想跳过代码可重复性。如果没有任何帮助,我会尝试您的解决方案。
标签: c# generics generic-type-argument