我如何将抽象列表转换为具体类型

bli*_*ink 0 c# list abstract

我有以下设置;

public abstract class StageObject
{
}
public class StageImage : StageObject
{
    public int Image;
}
public class StageStrip : StageObject
{
    public int Strip;
}
Run Code Online (Sandbox Code Playgroud)

我做以下事情;

StageList = new List<StageObject>();
StageList.Add(new StageStrip());
StageList.Add(new StageImage());
Run Code Online (Sandbox Code Playgroud)

我希望能够像这样投射数组元素这样的具体类型,但是我得到了一个错误;

(StageStrip) StageList[0].Strip = 2;
Run Code Online (Sandbox Code Playgroud)

我能做到这一点的唯一方法是创建一个临时变量并将其强制转换为数组.有没有办法可以在不创建临时变量的情况下完成?

Mar*_*zek 8

((StageStrip)StageList[0]).Strip = 2;
Run Code Online (Sandbox Code Playgroud)

  • 只是为了补充信息,如果由于某种原因你想要全部抛出它们,你可能会发现`.Cast <T>()`很有用.或者`.OfType <T>()`如果它们可能都不是 - 这往往更有用. (3认同)