将基类数组转换为派生类数组

mer*_*zuu 3 c# inheritance casting

在C#中是否可以将基类对象数组显式转换为其派生类对象数组之一?我有从类A派生的类C,我正在尝试将基类对象数组转换为派生类对象数组,但它返回返回null值.

public interface I
{
   public string Name;
   public string Id;
}
public class A
    {
        public string name;
        public string id;
    }

public class B: A,I
{
    public string Name
    {
       get { return name; }
       set{name= value;}
    }

    public string Id
    {
       get { return id; }
       set{id= value;}
    }
}


 A[] baseClassList= GetValues();
 B[] derivedClassList= baseClassList as B[];---THIS IS RETURNING NULL
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?任何帮助表示赞赏.

McA*_*den 5

你可以很容易地使用Linq 创建一个B[],baseClassList但它不会像演员一样简单.

B[] derivedClassList = baseClassList.OfType<B>().ToArray();
Run Code Online (Sandbox Code Playgroud)

编辑:或者 - 如果你想转换数组的内容,我建议一个复制构造函数.

public B(A source)
{
    Name = source.name;
    Id = source.id;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样转换:

B[] derivedClassList = baseClassList.Select(e => e is B ? (B)e : new B(e)).ToArray();
Run Code Online (Sandbox Code Playgroud)


Der*_*k W 5

为什么不直接这样做呢?

假设您的类型baseClassList对象集合A都是真正的B类型对象。

B[] derivedClassList = baseClassList.Cast<B>().ToArray();
Run Code Online (Sandbox Code Playgroud)