从静态函数返回对象数组

Posted

技术标签:

【中文标题】从静态函数返回对象数组【英文标题】:Returning array of objects from static function 【发布时间】:2020-07-20 17:26:48 【问题描述】:

我正在制作一个基本 Visual Studio 项目。 最简单的解释方法是显示代码。

using System;
using System.Collections.Generic;

namespace testing

    class Program
    
        static void Main(string[] args)
        

            int amountOfCars = getAmountOfCars();
            Car[] myCars = createCars(amountOfCars);

        

        public static int getAmountOfCars ()
            Console.WriteLine("Amount of Cars to enter");
            int amountOfCars = Convert.ToInt32(Console.ReadLine());
            return amountOfCars;
        


        public static Car createCars(int amountOfCars)

        
            Car[] myCars = new Car[amountOfCars];
            for (int i = 0; i < amountOfCars; i++)
            
                Console.WriteLine("Enter brand");
                string brand = Convert.ToString(Console.ReadLine());

                Console.WriteLine("Enter amount of wheels");
                int amountOfWheels = Convert.ToInt32(Console.ReadLine());

                Console.WriteLine("Enter amount of seats");
                int amountOfSeats = Convert.ToInt32(Console.ReadLine());

                myCars[i] = new Car(brand, amountOfWheels, amountOfSeats);
            
            return myCars[amountOfCars];

        
    


这一行

 Car[] myCars = createCars(amountOfCars);

抛出以下错误:

无法将 testing.Car 类型隐式转换为 testing.Car[]

所以,我然后尝试这个来转换

 Car[] myCars = (Car[]) createCars(amountOfCars);

但它仍然会抛出错误。

基本上我只是想从createcar 函数返回objectsarray,以便它可以在其余代码中使用。

解决这个问题的最佳做法是什么?

【问题讨论】:

Car createCars( 返回单个 Car,而不是数组 那么如何让它返回一个数组? 说实话,我很惊讶它没有抛出IndexOutOfRangeExceptionreturn myCars[amountOfCars];,因为看起来你似乎有一个“off by one”错误。数组中的最后一个元素是myCars[amountOfCars-1]; @phuzi 如果编译它会抛出异常...... @phuzi 不是因为只有在运行代码时才会发生这种情况,而是因为类型不匹配,目前它甚至无法编译。 【参考方案1】:

你需要从 createCars() 中返回一个数组:

public static Car[] createCars(int amountOfCars)

    
        Car[] myCars = new Car[amountOfCars];
        for (int i = 0; i < amountOfCars; i++)
        
            Console.WriteLine("Enter brand");
            string brand = Convert.ToString(Console.ReadLine());

            Console.WriteLine("Enter amount of wheels");
            int amountOfWheels = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Enter amount of seats");
            int amountOfSeats = Convert.ToInt32(Console.ReadLine());

            myCars[i] = new Car(brand, amountOfWheels, amountOfSeats);
        
        return myCars;

    

【讨论】:

【参考方案2】:

函数的签名是

public static Car createCars(int amountOfCars)

而不是

public static Car[] createCars(int amountOfCars)

也只返回数组

return myCars;

而不是

return myCars[amountOfCars]; // This returns only one object at the amountOfCars index in the myCars array. 

此外,这将触发ArrayIndexOutOfBoundsException,因为myCars 分配给amountOfCars,并且数组范围从myCars[0]myCars[amountOfCars-1]

【讨论】:

由于amountOfCars是不返回任何内容的数组大小,会导致索引超出范围异常。 是的..对不起我的坏。我只是想说在分配中返回的 OP 不会返回所有数组。我会适当更新。谢谢顺便说一句。

以上是关于从静态函数返回对象数组的主要内容,如果未能解决你的问题,请参考以下文章

打字稿静态函数没有接收参数

如何从静态函数返回函数接口?

为啥这些静态函数不按预期从另一个线程返回?

如何从静态类函数初始化静态类对象

从函数返回指针作为静态变量

如何为静态数组创建我的个人 ToList() 函数