我有一个看起来像这样的方法:
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;
}
有没有办法合并这个,因为唯一不同的是属性名称?
答案 0 :(得分:12)
制作单独的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;
}
答案 1 :(得分:9)
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]
的类型,如果我正确理解您的代码应该与parser.Parse(Description)
的类型相同。
答案 2 :(得分:0)
假设parser.Parse()
返回Servings[]
所持有的同一个类,您可以创建该类型的null object,其中X&amp; Y为零。然后你可以有一个函数返回Servings[]
的第一个元素(如果存在),或者new FoodDescriptionParser.Parser(Description)
,如果存在Description
,或者最后返回那个空对象。并根据需要收集X或Y.