如何从通用列表中提取派生类型?

Sha*_*awn 3 c# generics

我有一个具有以下属性的类:

public List<CommitmentItem<ITransaction, ITransactionItem>> CommitmentItems;
public List<CapitalCallCommitmentItem> CapitalCallCommitmentItems;
Run Code Online (Sandbox Code Playgroud)

CapitalCallCommitmentItem继承CommitmentItem.我希望CapitalCallCommitmentItems属性返回CommitmentItems类型为CapitalCallCommitmentItem的所有内容.所以我尝试了这段代码:

get
{                
    return CommitmentItems
        .Where(c => c.GetType() == typeof(CapitalCallCommitmentItem))
        .Select(c => (CapitalCallCommitmentItem)c)
        .ToList();
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个错误说:

错误1无法将类型'Models.CommitmentItem'转换为'Models.CapitalCallCommitmentItem'

这样做的正确方法是什么?

Ant*_*ram 12

使用OfType扩展方法.

return CommitmentItems.OfType<CapitalCallCommitmentItem>().ToList();
Run Code Online (Sandbox Code Playgroud)

在您的代码中,虽然您正在过滤where子句中的子类型,但它仍将返回列表的常规类型.OfType将返回提供的类型的可枚举.