我有一个包含这些属性的类:
public List<CommitmentItem<ITransaction, ITransactionItem>> CommitmentItems;
public List<CapitalCallCommitmentItem> CapitalCallCommitmentItems;
CapitalCallCommitmentItem
继承CommitmentItem。我希望CapitalCallCommitmentItems
属性返回类型为CapitalCallCommitmentItem的所有CommitmentItems
。所以我尝试了这段代码:
get
{
return CommitmentItems
.Where(c => c.GetType() == typeof(CapitalCallCommitmentItem))
.Select(c => (CapitalCallCommitmentItem)c)
.ToList();
}
但是,我收到错误说:
错误1无法将类型'Models.CommitmentItem'转换为'Models.CapitalCallCommitmentItem'
这样做的正确方法是什么?
答案 0 :(得分:12)
使用OfType
扩展名方法。
return CommitmentItems.OfType<CapitalCallCommitmentItem>().ToList();
在您的代码中,虽然您正在过滤where
子句中的子类型,但它仍将返回列表的常规类型。 OfType
将返回所提供类型的可枚举。
答案 1 :(得分:2)
确保它是可兑换的/可铸造的/类型。
然后尝试例如
.Cast<T>()
.OfType<T>()
答案 2 :(得分:1)
你正在接受它。以下在我的机器上工作正常。结果列表的类型为List<CapitalCallCommitmentItem>
:
get
{
return CommitmentItems
.Where(c => c is CapitalCallCommitmentItem)
.Select(c => c as CapitalCallCommitmentItem)
.ToList();
}
更新: ...但是,CommitmentItems.OfType<CapitalCallCommitmentItem>
是优越的。