从对象数组访问 属性 值 c#

Accessing property value from an array of objects c#

我试图从“BaseBallPlayer”对象数组中找到薪水最高的“球员”。我知道我需要遍历数组并将薪水属性与“if”语句进行比较。但是,我似乎无法弄清楚如何从数组中的对象访问特定的 属性。

这是我的 main() 的一个片段:

 static void Main(string[] args)
        {
            BasketBallPlayer basketBP1 = new BasketBallPlayer("Jeff", 24, 30000.00, 12.2, 6, 7, 8);
            BasketBallPlayer basketBP2 = new BasketBallPlayer("Jim", 27, 35000, 18, 5, 17, 9);
            BasketBallPlayer basketBP3 = new BasketBallPlayer("James", 32, 65000, 34, 87, 15, 12);

            object[] BasketBT = new object[] {basketBP1, basketBP2, basketBP3 };

            BaseBallPlayer baseBP1 = new BaseBallPlayer("Craig", 26, 53000, 53, 12, 9);
            BaseBallPlayer baseBP2 = new BaseBallPlayer("Chris", 35, 66000, 67, 19, 7);
            BaseBallPlayer baseBP3 = new BaseBallPlayer("Charlie", 32, 75000, 87, 23, 4);
            

            object[] BaseBT = new object[] { baseBP1, baseBP2, baseBP3 };

            foreach (object player in BaseBT)
            {
                
            }
                           
        }

这是 BaseBallPlayer 的父 class:

    {
        protected int age { get; set; }
        protected string name { get; set; }
        public double salary { get; set; }

        public sportsPlayer(string Name, int Age, double Salary)
        {
            this.name = Name; 
            this.age = Age;
            this.salary = Salary;
        }

        public override string ToString()
        {
            string details = string.Format("Name: {0} \n Age: {1} \n Salary: {2} \n ", this.name, this.age, this.salary);
            return details;
        }
    }

这里是 class BaseBallPlayer:

 class BaseBallPlayer: sportsPlayer
    {
        double battingAverage { get; set; }
        int homeRuns { get; set; }
        int errors { get; set; }

        public BaseBallPlayer(string Name, int Age, double Salary, double BattingAverage, int HomeRuns, int Errors): base(Name, Age, Salary)
        {
            this.battingAverage = BattingAverage;
            this.homeRuns = HomeRuns;
            this.errors = Errors;
        }

        public override string ToString()
        {
            string details = string.Format("Batting Average: {0} \n Home Runs: {1} \n Errors: {2} \n", this.battingAverage, this.homeRuns, this.errors);
            return base.ToString() + details;
        }
    }

为了访问类型中的属性,您应该声明该类型的变量而不是对象类型,因此您的代码应该如下所示才能访问 player.salary :

 static void Main(string[] args)
    {
        BasketBallPlayer basketBP1 = new BasketBallPlayer("Jeff", 24, 30000.00, 12.2, 6, 7, 8);
        BasketBallPlayer basketBP2 = new BasketBallPlayer("Jim", 27, 35000, 18, 5, 17, 9);
        BasketBallPlayer basketBP3 = new BasketBallPlayer("James", 32, 65000, 34, 87, 15, 12);

        sportsPlayer[] BasketBT = new object[] {basketBP1, basketBP2, basketBP3 };

        BaseBallPlayer baseBP1 = new BaseBallPlayer("Craig", 26, 53000, 53, 12, 9);
        BaseBallPlayer baseBP2 = new BaseBallPlayer("Chris", 35, 66000, 67, 19, 7);
        BaseBallPlayer baseBP3 = new BaseBallPlayer("Charlie", 32, 75000, 87, 23, 4);
        

        sportsPlayer[] BaseBT = new object[] { baseBP1, baseBP2, baseBP3 };

        foreach (sportsPlayer player in BaseBT)
        {
            // here you can access player.salary
        }
                       
    }

您必须将一种 BaseBT 修复为 BaseBallPlayer[]

BaseBallPlayer[] BaseBT = new BaseBallPlayer[] { baseBP1, baseBP2, baseBP3 };

顶薪球员

var playerMaxSalary=  BaseBT.OrderByDescending(b=>b.salary).FirstOrDefault();

结果

Name: Charlie
 Age: 32
 Salary: 75000
 Batting Average: 87
 Home Runs: 23
 Errors: 4

测试

    foreach (var player in BaseBT)
    {
        Console.WriteLine(player.ToString());
    }

结果:

Name: Craig
 Age: 26
 Salary: 53000
 Batting Average: 53
 Home Runs: 12
 Errors: 9

Name: Chris
 Age: 35
 Salary: 66000
 Batting Average: 67
 Home Runs: 19
 Errors: 7

Name: Charlie
 Age: 32
 Salary: 75000
 Batting Average: 87
 Home Runs: 23
 Errors: 4

如果将 BaseBT 定义为 BaseBallPlayer 的列表,您将获得相同的结果

List<BaseBallPlayer> BaseBT = new List<BaseBallPlayer> { baseBP1, baseBP2, baseBP3};