2017-07-02 42 views
1

重載函數我有這樣的功能:通過使用不同類型的

public static Mesh MeshFromPolylines(List<Polyline> nurbsCurves, int type, bool weld) 
{ 
..code.. 
} 

,我已超載:

public static Mesh MeshFromPolylines(Polyline[] nurbsCurves, int type, bool weld) 
{ 
..code.. 
} 

有沒有什麼辦法來寫不復制第二個功能粘貼相同的代碼? 這兩個函數裏面都有完全相同的代碼。只是差異是輸入List<Polyline>Polyline[]

+0

https://stackoverflow.com/questions/4482557/what-interfaces-do-all-arrays-implement-in-c檢查這個問題,字母「L 「是固體原則(https://stackoverflow.com/questions/13692126/cant-seem-to-understand-solid-principles-and-design-patterns) – demo

回答

5

一種單一的方法會工作,如果這將有簽名:

public static Mesh MeshFromPolylines(IEnumerable<Polyline> nurbsCurves, int type, bool weld) 
{ 
} 

它將既接受數組和列表。或者至少你可以從你的兩個方法中調用這個方法(如果你出於某種原因需要兩個帶有指定參數類型的方法)。

你可能得修改,雖然在方法體,例如獲得通過索引的元素,你需要做的nurbsCurves.ElementAt(i)代替nurbsCurves[i]

+0

感謝作爲一種魅力,我不需要改變任何東西。 – Petras

0

如果你使用LINQ,你可以做這樣的事情

public static Mesh MeshFromPolylines (List <Polyline> list, int type, bool weld) 
{ 
    MeshFromPolylines (list.ToArray(), type, weld); 
} 

你可以做相反的方式爲好,請檢查:List .ToArray()Enumerable.ToList()

0

您可以將陣列Polyline[]列出List<Polyline>的d調用基本函數並通過列表。請檢查下面的例子:

public static Mesh MeshFromPolylines(Polyline[] nurbsCurves, int type, bool weld) 
{ 
    MeshFromPolylines(nurbsCurves.ToList(), type, weld); 
} 

Please check this for Array to List conversion.