Pregunta

tengo un método que es similar al siguiente:

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

y tengo otro método que es similar al siguiente:

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

¿Hay alguna manera de consolidar esta como la única cosa diferente es los nombres de propiedad?

¿Fue útil?

Solución

Hacer un método GetServing separada:

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

Otros consejos

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

¿Cuál podría ser utilizado como esto:

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

Observación:. SomeType es del tipo de los que Servings[0] si entiendo correctamente su código debe ser el mismo que el tipo de parser.Parse(Description)

Suponiendo parser.Parse() devuelve la misma clase que tiene Servings[], se podría crear una nula objeto de ese tipo, para lo cual tanto X & y son cero. Entonces usted podría tener una función que devuelve el primer elemento de Servings[], si existe, o new FoodDescriptionParser.Parser(Description), si existe Description, o, por último, ese objeto nulo. Y reunir los X o Y, según sea necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top