You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:15:02