[英]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);
備注: SomeType
是SomeType
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.