像对象一样对待对象

Gen*_*bar 6 c# inheritance

下面的代码给我一个错误,说我的调用中有无效的参数 doStuffToLines(segments)

我不应该这样做,因为我有DimensionLineSegment来自Lines的继承吗?

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

        doStuffToLines(segments);

    }

    private void doStuffToLines(List<Line> lines)
    {

    }
Run Code Online (Sandbox Code Playgroud)

Mic*_*l G 3

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

你可以尝试这样的事情:

public void doStuffToLines<T>(IList<T> lines) where T : Line
{
  //do some thing           
}
Run Code Online (Sandbox Code Playgroud)

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

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