X個のクラスオブジェクトを動的に作成する

背景...

私は車と呼ばれるクラスがあると言うことができます。我々はちょうど車の名前とIDを格納するつもりです。 また、管理クラスに基づいた管理者ページがあり、totalCarsというintで作成したい車の総数を設定しているとします

質問: どのようにしてコード内のどこからでもアクセスできるフィールドとして自動車を動的に作成すると同時に、totalCarsの数に基づいて自動車の総数を作成する方法を教えてください。

サンプルコード:

      Cars car1 = new Cars();
      int totalCars;
      //Somehow I want to create cars objects/fields based on the 
      //number in the totalCars int
      protected void Page_Load(object sender, EventArgs e)
      {
          car1.Name = "Chevy";
          car1.ID = 1;

      }

      protected void Button1_Click(object sender, EventArgs e)
      {
         TextBox1.Text = car1.Name.ToString();
         //this is just a sample action.
      }
1
いくつかのリストに追加しますか?
追加された 著者 L.B,
あなたがその点にいるなら、あなたはデータベースを持っているべきです。あなたはそのタイプの情報を記憶に残すべきではありません。
追加された 著者 Servy,
異なるページにアクセスしたいというリストを作成したいのはなぜですか?そのリストをSessionまたはApplicationスコープにプッシュする必要があります:
追加された 著者 adatapost,
なぜあなたはこれをしたいのですか?なぜ単に List を持っていないのですか?フィールドを生成するコードが動的である場合、残りのコードはそれらのフィールドがそこにあることをどのように期待できますか?
追加された 著者 Lukazoid,
私がこのように問題に近づいたのは、私が5000台の車を持っている可能性があるからです。すべてのユーザーがすべての車を後で見るべきではない。リストが大きすぎてシステムが遅くなることを心配しました。 /多くのメモリを使用します。
追加された 著者 Code Smack,

2 答え

これはトリックすべきです:

int CarCount = 100;
Car[] Cars = Enumerable
            .Range(0, CarCount)
            .Select(i => new Car { Id = i, Name = "Chevy " + i })
            .ToArray();

よろしく

編集

そのようなこと(あなたはすべきではない)をどうやってやるのかを知りたければ、これを試してみてください:

using System.IO;

namespace ConsoleApplication3 {

    partial class Program {

        static void Main(string[] args) {
            Generate();
        }

        static void Generate() {

            StreamWriter sw = new StreamWriter(@"Program_Generated.cs");
            sw.WriteLine("using ConsoleApplication3;");
            sw.WriteLine("partial class Program {");

            string template = "\tCar car# = new Car() { Id = #, Name = \"Car #\" };";
            for (int i = 1; i <= 100; i++) {
                sw.WriteLine(template.Replace("#", i.ToString()));
            }

            sw.WriteLine("}");
            sw.Flush();
            sw.Close();
        }
    }    

    class Car {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

キーワード partial class に注目してください。これは、複数のソースファイルにまたがるクラスを持つことができることを意味します。これで、手作業でコードを作成し、もう一方を生成できます。

このコードを実行すると、次のコードが生成されます。

using ConsoleApplication3;
partial class Program {
    Car car1 = new Car() { Id = 1, Name = "Car 1" };
    Car car2 = new Car() { Id = 2, Name = "Car 2" };
    ...
    Car car99 = new Car() { Id = 99, Name = "Car 99" };
    Car car100 = new Car() { Id = 100, Name = "Car 100" };
}

このコードファイルをソリューションに追加することができます(プロジェクトを右クリックして既存の.. ..を追加してコンパイルします)。これで、これらの変数car1 .. car100を使用できます。

4
追加された
あなたが求めているのはコード生成ですが、間違った質問をしていることは間違いありません。あなたはそのようにしたいですか?それは地獄に対してプログラムするのが大変です。
追加された 著者 gjvdkamp,
学術目的のためだけの例を追加しました。
追加された 著者 gjvdkamp,
リストはおそらく最も良い解決策です。アプリケーションにデータベースを追加するだけでなく、しかしこれは究極の質問に答えていません。問題は、carsクラスを使用してX台の車を動的に作成することに関連していました。
追加された 著者 Code Smack,
例...私はint totalCars = 100と言っています。次に、carを作成したいと思います。car1 = new Cars();車car2 =新しい車(); .............車car100 =新しい車();この質問の一部は、単なるベストプラクティスではなく、学習に関連しています。
追加された 著者 Code Smack,

Use a List:

  List cars = new List();
  int totalCars;

  protected void Page_Load(object sender, EventArgs e)
  {
      cars = new List();
      for(int i=0; i
2
追加された