¿hay una manera de eliminar la duplicación en este código
-
01-10-2019 - |
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?
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.