есть ли способ удалить дублирование в этом коде

у меня есть метод, который похож на это:

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

Там какой-либо путь состоит в том, чтобы консолидировать это, поскольку единственной отличающейся вещью являются имена свойства?

5
задан Michael Petrotta 25 April 2010 в 19:12
поделиться

3 ответа

Создайте отдельный метод 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;
}
12
ответ дан 18 December 2019 в 07:28
поделиться
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);

Примечание: SomeType - это тип Servings [0] , которые, если я правильно понимаю ваш код, должны совпадать с типом of parser.Parse (Описание) .

9
ответ дан 18 December 2019 в 07:28
поделиться

Предполагая, что parser.Parse () возвращает тот же класс, что и Servings [] , вы можете создать нулевой объект этого типа, для которого оба X и Y равны нулю. Тогда у вас может быть функция, которая возвращает первый элемент Servings [] , если он существует, или новый FoodDescriptionParser.Parser (Description) , если Description существует , или, наконец, этот нулевой объект. И соберите X или Y по мере необходимости.

0
ответ дан 18 December 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: