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)
我怎么解决这个问题?任何帮助表示赞赏.
你可以很容易地使用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)
为什么不直接这样做呢?
假设您的类型baseClassList
对象集合A
都是真正的B
类型对象。
B[] derivedClassList = baseClassList.Cast<B>().ToArray();
Run Code Online (Sandbox Code Playgroud)