我有一个继承问题。
我从类似以下内容开始:

public class POpt
{
...
    private decimal profit;
    public decimal Profit
    {
        get { return profit; }
    }
...
}

public class Opt
{
...
    private List<POpt> pases;

    public int NumPasesPositivos()
    {
        return pases.Where(o => o.Profit > 0).Count();
    }
...
}


它可以正常工作..我可以调用NumPasesPositivos()并在List语句中获取具有正利润的语句数。

现在,我必须编写两个类似的类,如Popt和Opt ...并使用继承:

abstract public class P
{
...
...
}

public class POpt: P
{
...
    private decimal profit;
    public decimal Profit
    {
        get { return profit; }
    }
...
}

public class PBt: P
{
...
...
}


并且:

abstract public class T
{
...
    private List<P> pases;
...
}

public class Opt: T
{
...
    public int NumPasesPositivos()
    {
        return pases.Where(o => o.Profit > 0).Count();
    }
...
}

public class Bt:T
{
...
...
}


现在,类别T类别中的列表可以是POpt或PBt类别列表。现在的问题是,我不能使用NumPasesPositivos,因为Pases可以是POpt或PBt,Profit在PBt中未定义,因此我不能进行转换
在OPt中出现类似(List pases)的东西。where(o => o.Profit> 0).Count()....我不确定如何解决问题或如何重写类...

最佳答案

您可以使用OfType扩展方法并将其限制为可以强制转换为POpt的类型。

public int NumPasesPositivos()
{
    return pases.OfType<POpt>().Where(o => o.Profit > 0).Count();
}

10-06 03:26