gpt4 book ai didi

c# - 将存储为 List 的子对象转换为父对象
转载 作者:行者123 更新时间:2023-11-30 13:57:12 26 4
gpt4 key购买 nike

我有一个父类和一堆子类(Child1、Child2、Child3),它们都继承自父类。

我将来自子类的不同对象存储在一个对象列表(List)中,我需要检查这些子对象中从父类继承的一些属性,我试图将子对象转换为父类,但我得到无效转换异常.

Child1 aChild1 = new Child1();
Child2 aChild2 = new child2();

List<object> childsList = new List<object>();

childsList.Add(aChild1);
childsList.Add(aChild2);

foreach(object child in childsList)
{
Parent p = (Parent)child;//Here I got the exception
}

我可以使用“is”检查子对象的类型。

if (child is Child1){}
else if (child is Child2{} .....

或者通过获取 child 的类型并将其与类名进行比较来了解类型:

if (child.GetType().Name.Equals("Child1")
//Do whatever
else if (child.GetType().Name.Equals("Child2")
//Do another whatever :D

但我正在寻找一种更好的方法来将子类转换为它们的父类。

最佳答案

考虑到您的评论“问题是我使用相同的列表来存储不是 Parent 的子项的对象。”,此列表包含 Parent 的混合对象和其他不相关对象。

然后您必须以优雅的方式过滤掉它们。最简单的可能是使用 LINQ 的 OfType 方法:

List<Parent> result = childsList.OfType<Parent>().ToList();

任何不是 Parent 的对象将被忽略。

也就是说,这(通常)是一种明显的代码味道,更理想的情况是您不混合列表中存储的对象,因此 childsList可以强类型化为 List<Parent>首先,但如果不了解您的应用程序设计的其余部分,就很难对“更好的方法”的细节发表评论。

编辑:这是它与您现有代码的用法:

foreach(Parent p in childsList.OfType<Parent>())
{

}

关于c# - 将存储为 List<object> 的子对象转换为父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22348511/

26 4 0