从静态函数返回对象数组
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
函数返回objects
的array
,以便它可以在其余代码中使用。
解决这个问题的最佳做法是什么?
【问题讨论】:
Car createCars(
返回单个 Car
,而不是数组
那么如何让它返回一个数组?
说实话,我很惊讶它没有抛出IndexOutOfRangeException
。 return 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 不会返回所有数组。我会适当更新。谢谢顺便说一句。以上是关于从静态函数返回对象数组的主要内容,如果未能解决你的问题,请参考以下文章