c# - C#:让编译器在从 IEnumerable 读取多态对象时调用正确的方法重载
问题描述
我有一个IEnumerable<BaseClass>
可能包含一些类型的对象SubClassOfBaseClass
。我还有一个带有 2 个重载的重载方法,每个都采用 BaseClass 或 SubClassOfBaseClass。
当我遍历IEnumerable
并调用每个成员的重载方法,将成员作为参数传递给它时,它总是调用用于 BaseClass 的重载,而不是 SubClassOfBaseClass。
有没有一种优雅的方法可以让它调用正确的重载 - 然后手动检查 IEnumerable 的每个成员并将其归类为正确的类型?
示例代码:
public class BaseClass {
}
public class SubClassOfBaseClass : BaseClass {
}
public class Program {
private static void Method(BaseClass item) {
Console.WriteLine("base class!");
}
private static void Method(SubClassOfBaseClass item) {
Console.WriteLine("sub class!");
}
public static void Main(string[] args) {
var items = new List<BaseClass>();
items.Add(new BaseClass());
items.Add(new SubClassOfBaseClass());
foreach (var item in items) {
Method(item);
}
}
}
结果输出将是:
base class!
base class!
...但我需要它
base class!
sub class!
解决方案
我试图将其发布到评论部分,但我没有这样做的权限。
但是,这是一个可行的解决方案:
根据dynamic-MSDN,尽量避免使用var
-的迭代dynamic
:
foreach (dynamic item in items) {
Method(item);
}
希望有帮助。祝你好运!
推荐阅读
- c++ - 字符串排列递归问题
- google-cloud-platform - 不同项目中的 Cloud SQL 连接
- java - 根据声纳配置将我的 for 循环复杂度降低到 4
- angular - 在 ag-grid 中是否可以在同一列中显示带有复选框和另一种类型的单元格
- c# - 如何在 POS 机和 App 之间打开 TCP Stream 并发送多条消息?
- r - 将元素添加到深度嵌套列表
- python - Pandas 使用通配符模式读取 csv 以选择列
- reactjs - 导出变量 - React
- xamarin - Xamarin.Forms android检查用户是否单击了拒绝并且不再询问
- java - 材料转换 FAB 到活动 - 转换回来时活动仍然存在一秒钟