【问题标题】: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 不是因为只有在运行代码时才会发生这种情况,而是因为类型不匹配,目前它甚至无法编译。

标签: c# arrays object


【解决方案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 不会返回所有数组。我会适当更新。谢谢顺便说一句。
    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2012-02-29
    • 2021-01-30
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多