我对泛型很陌生,我有一个问题,两种方法本质上是一样的。唯一的区别是参数。
我有一个 json 列表,有很多 JSON 对象,我有两种方法以两种不同的方式获取不同的对象。该对象是一个由 ID 和代码组成的语言对象。
我试过深入研究泛型,因为我认为这是我解决这个问题以使代码更好的方法。但是,我真的很难理解它。
这些方法看起来像这样。
public LanguageDto GetLanguageById(int id)
{
var o = JObject.Parse(json);
var a = (JArray) o["list"];
var _list = a.ToObject<IList<LanguageDto>>();
return _list.FirstOrDefault(x => x.Id == id);
}
public LanguageDto GetLanguageByCode(string code)
{
var o = JObject.Parse(json);
var a = (JArray) o["list"];
var _list = a.ToObject<IList<LanguageDto>>();
return _list.FirstOrDefault(x => x.LanguageCode == code);
}
我想要的是一个看起来像这样的组合方法
public LanguageDto GetLanguage(T)
{
var o = JObject.Parse(json);
var a = (JArray) o["list"];
var _list = a.ToObject<IList<LanguageDto>>();
return _list.FirstOrDefault(x => x.T == T);
}
我希望你能得到我的伪代码。
如果有人有一些关于泛型的很好的学习资源或涉及这个问题的东西,如果你愿意分享,我将不胜感激。
看起来您实际上只是想要一种方法来更改所使用的比较。我建议只传递一个委托进行比较。
public LanguageDto GetLanguage(Func<LanguageDto, bool> isMatch)
{
var o = JObject.Parse(json);
var a = (JArray) o["list"];
var _list = a.ToObject<IList<LanguageDto>>();
return _list.FirstOrDefault(isMatch);
}
那时,您可以以任何您选择的方式定义该比较。
LanguageDto GetLanguageById(int id) => GetLanguage(x => x.Id == id);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句