簡體   English   中英

重構方法 - 傳入屬性名稱

[英]Refactor methods - pass in property name

我想知道是否可以將這兩種方法重構為一種。 唯一的區別在於Select方法; 一個使用BaselineSetNumber,另一個使用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(sets, BaselineSetNumber);一樣調用的方法LoadSet(sets, BaselineSetNumber); LoadSet(sets, ComparisonSetNumber);

是的,這可以通過創建更高階的函數來實現 您的新代碼看起來像這樣:

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM