抽象类列表

发布于 2024-12-05 18:29:08 字数 789 浏览 0 评论 0原文

我有抽象类:

public abstract class MyClass
{
    public abstract string nazwa
    {
        get;
    }
}

还有两个从 MyClass 继承的类:

public class MyClass1 : MyClass
{
    public override string nazwa
    {
        get { return "aaa"; }
    }
}

public class MyClass2 : MyClass
{
    public override string nazwa
    {
        get { return "bbb"; }
    }
}

在另一个类中我创建列表:

List<MyClass> myList;

现在我想创建

myList = new List<MyClass1>;

编译器显示错误:

Cannot implicitly convert type 'System.Collections.Generic.List<Program.MyClass1>' to 'System.Collections.Generic.List<Program.MyClass>'

我必须有一些简单的方法来转换它...我找不到任何有用的东西

I have abstract class:

public abstract class MyClass
{
    public abstract string nazwa
    {
        get;
    }
}

And two classes which inherit from MyClass:

public class MyClass1 : MyClass
{
    public override string nazwa
    {
        get { return "aaa"; }
    }
}

public class MyClass2 : MyClass
{
    public override string nazwa
    {
        get { return "bbb"; }
    }
}

In another class I create List:

List<MyClass> myList;

Now I want to create

myList = new List<MyClass1>;

The compiler show an error:

Cannot implicitly convert type 'System.Collections.Generic.List<Program.MyClass1>' to 'System.Collections.Generic.List<Program.MyClass>'

I must be some easy way to convert it... I cannot find anything useful

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

往日 2024-12-12 18:29:08

您可以将列表创建为基本类型:

List<MyClass> myList = new List<MyClass>();

然后您可以将派生项目添加到其中:

myList.Add(new MyClass2());

You can create the list as the base type:

List<MyClass> myList = new List<MyClass>();

Which you can then add derived items to:

myList.Add(new MyClass2());
垂暮老矣 2024-12-12 18:29:08

List 转换为 List 并不安全。

你期望会发生什么?

List<MyClass1> derivedList = ...
List<MyClass> baseList = derivedList;
baseList.Add(new MyClass2());    //Boom!

如果你写You're Asking for covariance; 协方差只能通过只读接口实现。
因此,IEnumerable 可转换为 IEnumerable

It is not safe to convert a List<Derived> to a List<Base>.

What do you expect to happen if you write

List<MyClass1> derivedList = ...
List<MyClass> baseList = derivedList;
baseList.Add(new MyClass2());    //Boom!

You're asking for covariance; covariance is only possible with read-only interfaces.
Thus, IEnumerable<Derived> is convertible to IEnumerable<Base>.

俏︾媚 2024-12-12 18:29:08

你必须有一个基类列表,稍后当你需要的时候你可以使用Linq来获取MyClas1项列表。

 List<MyClass> BaseList = new ...

 BaseList.FillWithItems();

 List<MyClass1> DerivedList = BaseList.OfType<MyClass1>().ToList();

You must have a base class list, and later you can use Linq to get the MyClas1 item list when you need it.

 List<MyClass> BaseList = new ...

 BaseList.FillWithItems();

 List<MyClass1> DerivedList = BaseList.OfType<MyClass1>().ToList();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文