重构方法 - 传入属性名称 [英] Refactor methods - pass in property name

查看:99
本文介绍了重构方法 - 传入属性名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道是否有可能将这两种方法重构为一体。唯一不同的是在选择的方法; 。人使用BaselineSetNumber,其他ComparisonSetNumber

I'm wondering if it's possible to refactor these two methods into one. The only difference is in the Select method; one uses BaselineSetNumber, the other ComparisonSetNumber.

public Set LoadBaselineSet(ObservableCollection<Set> sets)
{
    using (var db = _contextFactory.GetContext())
    {
        var setNumber =
            db.Users.Where(x => x.Login == Environment.UserName)
                    .Select(x => x.BaselineSetNumber).Single(); // !!! HERE
        return sets.Single(x => x.SetNumber == setNumber);
    }
}

public Set LoadComparisonSet(ObservableCollection<Set> sets)
{
    using (var db = _contextFactory.GetContext())
    {
        var setNumber =
            db.Users.Where(x => x.Login == Environment.UserName)
                    .Select(x => x.ComparisonSetNumber).Single(); // !!! HERE
        return sets.Single(x => x.SetNumber == setNumber);
    }
}



我想有一种方法,我可以调用像 LoadSet(套,BaselineSetNumber); LoadSet(套,ComparisonSetNumber);

推荐答案

是的,这是可能通过创建的高阶函数。您的新代码将是这个样子:

Yes, this is possible by creating a higher-order function. Your new code would look something like this:

public Set LoadBaselineSet(ObservableCollection<Set> sets)
{
    return LoadSet(sets, (x) => x.BaselineSetNumber)
}

public Set LoadComparisonSet(ObservableCollection<Set> sets)
{
    return LoadSet(sets, (x) => x.ComparisonSetNumber)
}

public Set LoadSet(ObservableCollection<Set> sets, Func<dbObject, Int> elementIdentity){
        using (var db = _contextFactory.GetContext())
    {
        var setNumber =
            db.Users.Where(x => x.Login == Environment.UserName)
                    .Select(elementIdentity).Single(); // !!! HERE
        return sets.Single(x => x.SetNumber == setNumber);
    }
}

这篇关于重构方法 - 传入属性名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆