【问题标题】:Make an array of classes制作一个类数组
【发布时间】:2013-03-01 18:50:47
【问题描述】:

我需要创建另一个类的数组。 示例:

namespace std
{
      public class Car
      {
           double number,id;

           public Car()
           {
               // initializing my variables for example:
               number = Random.nextdouble();
           }

      }
      public class Factory
      {
           public Factory(int num)
           {
               Car[] arr = new Car(num);
           }
      }
}

问题是我得到这个错误:

'Car' 不包含带有 '1' 参数的构造函数

我只需要在Factory 类中有一个Car 数组(汽车变量用它的构造函数初始化)。

【问题讨论】:

  • 你想用new car(num)做什么? num 应该做什么?你的汽车构造函数没有参数
  • @AdamPlocher:是的,但是看看问题标题和他试图分配给它的变量 - 很明显他正在尝试创建一个数组。
  • 是的,我在评论后不久意识到 :-)

标签: c# arrays object


【解决方案1】:

您刚刚使用了错误的括号。您总是对数组和索引器使用方括号。圆括号用于调用方法、构造函数等。您的意思是:

car[] arr = new car[num];

请注意,传统上 .NET 类型是 Pascal 大小写的,因此您的类型应该是 CarFactory 而不是 carfactory

还要注意,在创建数组之后,每个元素都会是一个空引用——所以你不应该这样写:

// Bad code - will go bang!
Car[] cars = new Car[10];
cars[0].SomeMethod(0);

改为:

// This will work:
Car[] cars = new Car[10];
cars[0] = new Car(); // Populate the first element with a reference to a Car object
cars[0].SomeMethod();

【讨论】:

  • 谢谢,问题解决了。但另一个问题:我可以在没有 num 值的情况下在构造函数之外声明 arr 吗?换句话说,使数组的大小是动态的?
【解决方案2】:

在声明数组或索引器时,您需要使用[] 而不是()

car[] arr = new car[num];

【讨论】:

    【解决方案3】:

    如果您的要求不限于仅使用数组,您可以使用类型化列表。

    List<Car> = new List<Car>(num); 
    //num has to be the size of list, but a list size is dinamically increased.
    

    您的代码中的错误是该数组应按如下方式初始化:

    public class factory
          {
               public factory(int num)
               {
               car[] arr = new car[num];
               }
          }
    

    问候,

    【讨论】:

      【解决方案4】:
      using System;
      namespace ConsoleApplication1
      {
          public class Car
          {
              public double number { get; set; }
              public Car()
              {
                  Random r = new Random();            
                  number = r.NextDouble();// NextDouble isn't static and requires an instance
              }
          }
          public class Factory
          {
              //declare Car[] outside of the constructor
              public Car[] arr;
              public Factory(int num)
              {
                  arr = new Car[num]; 
              }
          }
          class Program
          {
              static void Main(string[] args)
              {
                  Factory f = new Factory(3);
                  f.arr[0] = new Car();
                  f.arr[1] = new Car();
                  f.arr[2] = new Car();
                  foreach (Car c in f.arr)
                  {
                      Console.WriteLine(c.number);
                  }
                  Console.Read();
              }
          }
      }
      

      【讨论】:

      • @JonSkeet - 在作者自己的示例中,他忽略了iDnum,因为实际上并未使用该参数。
      • @Ramhound:但他显然试图在问题的工厂构造函数中使用num,而之前这个答案忽略了它。
      • @kashif:是的,这样更好。目前还不清楚你为什么要引入局部变量(如果num 是 0、1 或 2,它会爆炸)但我很好。
      • @JonSkeet - 第五次阅读作者的代码后,我才意识到他想用num做什么。
      • num 是实际数组大小(汽车类的对象数)
      猜你喜欢
      • 2020-01-13
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      相关资源
      最近更新 更多