2010-11-30 19 views
0
  1. 特定の予約に関してさまざまな情報のフィールドを含むクラス(ConflictingBooking)を作成しました。
  2. 私はデータベースをループし、一定の基準に基づいて特定の予約を選択します。
  3. 選択した特定の条件でクラスのインスタンスを作成したいとします。
  4. 次に、これらのクラスインスタンスをリストに追加して、別の場所で使用したいと思います。

私が持っている問題は、ステップ3で、私は、新しいインスタンス「を見つけ[i]は、」私が見つかった各予約ごとにインクリメントされた場合のような何か名前を付けたいされています、上記のコードで実行時にクラスのインスタンスを作成する

   ConflictingBooking found = new ConflictingBooking(); 
       found.BookingNumber = conflictingBookingNumber; 
       found.BookingStarts = conflictingBookingDT; 

       conflictingBookings.Add(found); 

を私はプログラムで「見つけた」と置き換える必要がある。

私は、次のような簡単なコードスニペットを読んでいただければ幸いです。参考にしていますので、私がやっていることを知っています:-)。私はちょうど私の問題をGoogleにする方法を知らない。

私は完全には明らかにされていないようだ - ここでは、適切なコードです:私の問題を明確にして

 dbManager.Open(); 
     dbManager.ExecuteReader(CommandType.Text, string.Format("SELECT BookingDate, {0} FROM BTable WHERE Court IN {1} AND BookingDate IN ({2})", columns, facilityIDs, bookingDates)); 
     using (IDataReader rdr = dbManager.DataReader) 
     { 
     decimal conflictingBookingNumber = 0; 
     DateTime conflictingBookingDT; 
     object result = null; 
     while (rdr.Read()) 
     { 
      for (int i = 0; i < requestedColumnNames.Count; i++) 
      { 
      result = dbManager.DataReader[requestedColumnNames[i].ToString()]; 
      if (result != null) 
       conflictingBookingNumber = Convert.ToDecimal(result); 

      result = dbManager.DataReader["BookingDate"]; 
      if (result != null) 
       conflictingBookingDT = Convert.ToDateTime(result); 

      if (conflictingBookingNumber > 0) 
      { 
       int next = conflictingBookings.Count + 1; 


       ConflictingBooking found = new ConflictingBooking(); 
       found.BookingNumber = conflictingBookingNumber; 
       found.BookingStarts = conflictingBookingDT; 

       // conflictingBookings is a List<conflictingBooking> 
       conflictingBookings.Add(found); 
      } 
      } 
     } 
     } 

希望。

+0

「プログラムで見つけたものを置き換える」と正確には何か?私が理解しておいていただきたいのは、あなたが提供するコードの塊が、あなたのコレクションを埋め込む何らかの反復の中でスコープされるということです。あなたは明確にしていただけますか? – JohnP

+0

あなたのコードの問題は何ですか? 'new'演算子は、クラスの新しいインスタンスを作成します。 なぜ、あなたが変数名である 'found'を置き換える必要があるのか​​を明らかにすれば助けになるかもしれません。 – Serguei

答えて

2

あなたが探しているのは、コードをforループに入れることだけです。私は完全にあなたを誤解されるかもしれないが、それがない場合は、あなたがあなたの質問を明確にしてください何をしたい、この

int i = 0; 
foreach(var result in resultSet) 
{ 
    ConflictingBooking found = new ConflictingBooking(); 
    found.BookingNumber = conflictingBookingNumber; 
    found.BookingStarts = conflictingBookingDT; 
    found.Name = "found["+i++ +"]"; 

    conflictingBookings.Add(found); 
} 

のような何かをしたい場合は

+0

ありがとうございます - 元の投稿に「ループ」を含めるように修正しました – David

+0

あなたの回答は、リストに追加するアイテムに固有の名前は必要ないことを示唆しています。あれは正しいですか? – David

+0

はい、名前はループ内でスコープされているため、変数がループ内の名前を変更する必要はありません。ループの繰り返しが発生する間、名前はオブジェクトにのみバインドされます。ループにあなたは質問に追加しましたあなたが今質問しているものがわからない –

0

シンプルなソリューション:あなたのコンストラクタにループカウンタを追加します。

ConflictingBooking found = new ConflictingBooking(i); 

を次にメソッドを追加(またはToString()をオーバーライドする)文字列連結インスタンス名を返すように。

+0

このケースでは経験がある人にとっては難しい解決策でしたが、私はいつも過去にこのような状況を避けることができましたが、私が直面していた時間だと思っていました。 質問に私の例を使用して提案しているコードを投稿する可能性はありますか? – David

+0

ミッチ - あなたが何を言っているのか分かりません! – David

1

変数名のみへの利便性の問題として存在するように思えますプログラマーであり、実行時には実際には存在しません。実行時に実際の変数を生成することはできません。

しかし、リストを作成するので、インデックスに基づいて表示するために「名前」を生成するために必要なすべてのデータが必要です。例:

for(int i = 0; i < conflictingBookings.Length; i++) 
{ 
    Console.WriteLine("found[" + i + "]: " + found.BookingNumber); 
} 
+0

私は一意の名前が必要ですクラスをリストに追加します。これは当てはまりません! – David

+0

@David:そうです。変数 "スコープ"はあなたがgoogleする必要があります。この場合、 "見つかった"変数は "if"ブロックの中括弧内にのみ存在します。 – StriplingWarrior

+0

ありがとうございます。 – David

関連する問題