如何从这两种方法中制成一种组合方法



我是仿制药的新手,我有一个问题,其中两种方法基本上做同样的方法。唯一的区别是参数。

我有一个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);

最新更新