如何将 foreach 与继承类一起使用?

Phi*_*hil 1 c# foreach casting

我有一个 Item 的基类。继承的类是Book。所以,一本书是一个物品。极好的。

现在,我有一个名为 Take() 的方法。它对所有项目执行 foreach。

它正在做...

foreach (Item item in lstItems)
Run Code Online (Sandbox Code Playgroud)

它还获取我的 Book 对象,但只是基本成员。

当然,我无法从中获取这本书的具体属性。由于并非所有项目都是书籍,因此我不想每次都将项目转换为书籍。

有没有一种通用的方法可以使用 C# 在 foreach 中获取继承的类?

小智 5

如果列表中有 A(或者不是 B 或 B 的子类的其他内容),

那么它就会因无效强制转换而中断。您可能想要:

foreach(B i in lstItems.OfType<B>()) {...}
Run Code Online (Sandbox Code Playgroud)

在 .NET 3.5 中。(顺便说一句,我假设它lstItems本身将是非空的。)