C#如何从对象数组中访问属性并找出薪资最高的BaseBallPlayer球员
解决方案
核心问题说明
你无法访问属性的根本原因是:将BaseBT数组声明为了object[]类型,遍历得到的player变量默认是object类型,自然无法直接访问BaseBallPlayer或父类定义的salary属性。
推荐方案(类型安全,无转换开销)
直接修改数组的声明类型为BaseBallPlayer[],从根源避免类型转换问题,代码修改如下:
// 把原来的object[]改成BaseBallPlayer[] BaseBallPlayer[] BaseBT = new BaseBallPlayer[] { baseBP1, baseBP2, baseBP3 }; // 初始化最高薪资和对应球员变量 double maxSalary = double.MinValue; BaseBallPlayer highestPaidPlayer = null; foreach (BaseBallPlayer player in BaseBT) { // 直接访问salary属性对比 if (player.salary > maxSalary) { maxSalary = player.salary; highestPaidPlayer = player; } } // 输出结果 Console.WriteLine("薪资最高的棒球球员信息:"); Console.WriteLine(highestPaidPlayer.ToString());
兼容方案(如果必须保留object[]类型)
如果业务要求不能修改数组类型,你可以在遍历的时候做显式类型转换:
double maxSalary = double.MinValue; BaseBallPlayer highestPaidPlayer = null; foreach (object playerObj in BaseBT) { // 安全转换,避免类型不匹配报错 BaseBallPlayer player = playerObj as BaseBallPlayer; if (player == null) continue; if (player.salary > maxSalary) { maxSalary = player.salary; highestPaidPlayer = player; } }
补充说明
- 父类
sportsPlayer里的salary已经声明为public,子类继承后可以直接访问,不需要额外处理 - 优先使用第一种方案,强类型数组在编译阶段就能检查类型错误,避免运行时报错
内容的提问来源于stack exchange,提问作者MycoNut
相关产品推荐
相关产品推荐

