像对象一样对待对象

时间:2014-06-12 21:11:55

标签: c# inheritance

以下代码在我的doStuffToLines(segments)

调用中给出了一个错误消息,指出存在无效参数

我不能这样做,因为我的DimensionLineSegment继承了行吗?

    private void doStuff()
    {
        List<DimensionLineSegment> segments = new List<DimensionLineSegment>();

        doStuffToLines(segments);

    }

    private void doStuffToLines(List<Line> lines)
    {

    }

1 个答案:

答案 0 :(得分:3)

您无法将具体类型传递给方法,因为List不是协变的。

您可以尝试这样的事情:

public void doStuffToLines<T>(IList<T> lines) where T : Line
{
  //do some thing           
}

通过指定泛型约束,可以限制传递给Line类型对象的泛型类型或它的派生后代。

需要注意的一点是,如果您使用的是.NET 4.0,则可能会将您的方法从接受List更改为IEnumerable,因为T generic参数是协变的。