gpt4 book ai didi

c# - 在 C# 中向下转换对象列表

转载 作者:太空狗 更新时间:2023-10-29 17:43:52 26 4
gpt4 key购买 nike

如何向下转换对象列表,以便列表中的每个对象都向下转换为派生类的对象?

这是场景。

我有一个基类,它有一个 List 基项,还有两个继承自它的类:

public class BaseClass
{
public List<BaseItem> items;
protected BaseClass()
{
// some code to build list of items
}
}
public class DerivedClass : BaseClass
{
public DerivedClass : base() {}
}
public class AnotherDerivedClass : BaseClass
{
public AnotherDerivedClass : base() {}
}

public class BaseItem {}
public class DerivedItem : BaseItem {}
public class AnotherDerivedItem : BaseItem {}

这个想法是不必重复构建项目列表所需的代码。 BaseItem 具有我需要的所有基本内容,而且我始终可以将 BaseItem 向下转换为派生项之一。

当我有一个列表时,问题就出现了。 BaseItemList 是在BaseClass 中声明的,因为所有的派生类都必须有它。但是在运行时访问它时,我似乎无法向下转换为派生类。

最佳答案

使用 LINQ:

    var baseList = new List<BaseClass>();
var derivedList = baseList.Cast<DerivedClass>();

注意:向下转型通常是一种“异味”,表示继承层次结构错误或实现错误。拥有基类的想法是,您可以将所有子类视为父类(super class),而不必向下转换为单个子类类型。

您可能想要使用 OfType 来从父类(super class)集合中“捞出”某些派生类,而不是 Cast。但同样,应该没有必要这样做。

问问自己,为什么需要一个子类 - 也许您需要将一些功能移至基类?

关于c# - 在 C# 中向下转换对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5234111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com