2013-02-18 40 views
3

如何將具有不同繼承類的List傳遞給函數需要父接口List? 編譯器生成一個錯誤。如何將通用List中相同接口的各種派生類作爲參數傳遞給函數?

public interface ControlPoint 
    { 
    } 

    public class Knot: ControlPoint 
    { 
    } 

    public class Node: ControlPoint 
    { 
    } 

    class Spline 
    { 
     List<Knot> knots=new List<Knot>(); 
     List<Node> nodes=new List<Node>(); 

     void Calculate(List<ControlPoint> points) {} //<------- Compiler Error 

     void Test() 
     { 
      Calculate(knots); 
      Calculate(nodes); 
     } 

    } 
+0

編譯器消息「方法或訪問器塊之後的分號無效」,是否不知道問題是什麼? – Rawling 2013-02-18 09:51:28

回答

8

兩個選項:

1)如果你使用C#4和.NET 4+,而你只需要遍歷點Calculate,只是改變了簽名:

void Calculate(IEnumerable<ControlPoint> points) 

這將使用通用協方差。

2)你可以做的方法一般:

void Calculate<T>(List<T> points) where T : ControlPoint 

我寧願先在一般的 - 即使你使用.NET 4.0/C#4,如果你可以改變Calculate使用IEnumerable<T>而不是List<T>,那樣會更乾淨 - 所以你可以混合使用這兩種方法,並採用IEnumerable<T>

+0

非常感謝。第二個非常合適 – Mixer 2013-02-18 09:54:09

相關問題