簡體   English   中英

有沒有辦法刪除此代碼中的重復

[英]is there a way to remove duplication in this code

我有一個看起來像這樣的方法:

   private double GetX()
    {
        if (Servings.Count > 0)
        {
            return Servings[0].X;
        }
        if (!string.IsNullOrEmpty(Description))
        {
            FoodDescriptionParser parser = new FoodDescriptionParser();
            return parser.Parse(Description).X;
        }
        return 0;
    }

我有另一個看起來像這樣的方法:

  private double GetY()
    {
        if (Servings.Count > 0)
        {
            return Servings[0].Y;
        }
        if (!string.IsNullOrEmpty(Description))
        {
            FoodDescriptionParser parser = new FoodDescriptionParser();
            return parser.Parse(Description).Y;
        }
        return 0;
    }

有沒有辦法鞏固這個,因為唯一不同的是屬性名稱?

制作一個單獨的GetServing方法:

private Serving GetServing() {
    if (Servings.Count > 0)
        return Servings[0];

    if (!string.IsNullOrEmpty(Description)) {
        FoodDescriptionParser parser = new FoodDescriptionParser();
        return parser.Parse(Description);
    }
    return null;
}

private double GetX() {
    Serving serving = GetServing();
    if (serving == null) return 0;
    return serving.X;
}

private double GetY() {
    Serving serving = GetServing();
    if (serving == null) return 0;
    return serving.Y;
}
private double Get(Func<SomeType, double> valueProvider)
{
    if (Servings.Count > 0)
    {
        return valueProvider(Servings[0]);
    }
    if (!string.IsNullOrEmpty(Description))
    {
        FoodDescriptionParser parser = new FoodDescriptionParser();
        return valueProvider(parser.Parse(Description));
    }
    return 0;
}

哪個可以這樣使用:

var x = Get(value => value.X);
var y = Get(value => value.Y);

備注: SomeTypeSomeType Servings[0]的類型,如果我理解你的代碼正確應該與parser.Parse(Description)的類型相同。

假設parser.Parse()返回與parser.Parse() Servings[]相同的類,您可以創建該類型的空對象 ,其中X和Y都為零。 然后,你可以有一個返回的第一個元素的功能Servings[]如果存在的話,或者new FoodDescriptionParser.Parser(Description) ,如果Description是否存在,或者,最后,空對象。 並根據需要收集X或Y.

暫無
暫無

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

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