2011-06-20 7 views
2

私はReservationsというオブジェクトを持っています。 Reservationsの内部には、配列であるReservationという別のオブジェクトがあります。私は次のエラーを取得オブジェクトインスタンスでメソッドが見つかりません

reservations.Reservation[i] = new Reservation(); //reservations if of type Reservations 

:私は次のように行うと

がオブジェクトインスタンスのメソッドを見つけることができませんが

物事は私が気づいたカップルがいることです私がこの点に達すると、IndexOutOfRangeErrorがスローされ、reservations変数にカーソルを置くと番号が表示されます。

VBコード

Public Class Reservations 
{ 
    Private RerservationField() as Reservation 

    Public Property Reservation() as Reservation() 
     Get 
      Return Me.ReservationField 
     End Get 
     Set 
      Me.ReservationId = value 
     End Set 
    End Property 
} 

Dim reservations As New Reservations() 
ReDim reservations.Reservation(0) 

Dim i as Integer = 0 

reservations.Reservation(i) = New Reservation() 

C#コード

public class Reservations 
{ 
    Reservation[] reservation {get;set;} 
} 

Reservations reservations = new Reservations(); 
reservations.Reservation = new Reservation[0]; 
int i = 0; 

VBコードとC#コードは、XML要求に基づいて、配列の長さをインスタンス化されています。だから、VBのコードでは、それがこのやっていた:

ReDim reservations.Reservation(rq.Reservations.Reservation.Length - 1) 

とC#のコードでは、これをやっていた:

reservations.Reservation(rq.Reservations.Reservation.Length - 1). 

は私の問題を超えています。私はする必要があります:

reservations.Reservation(rq.Reservations.Reservation.Length) 

rqです。

+0

アレイに新しい予約を追加しようとしていますか? 'i'は配列の範囲外ですか? – AllenG

+0

私はゼロですが、私がそれを割り当てた後、私は長い番号です。どこから来たのか分かりません。 – Xaisoft

+0

配列は、reservations.Reservation [i] = new Reservation();を割り当てることができる辞書ではありません。 – flayn

答えて

2

あなたのライン:

reservations.Reservation = new Reservation[0]; 

は、最大長さが0の配列を作成しますか?基本的にnullではありませんが、空です。

予約をインスタンス化する必要があります。保存配列(SIZEはそれがどれだけ大きいか)。あなたはあなたの長さから-1する必要はありません。あなたは新しい配列を指定した場合は、[1] 1つの要素、2つの2の要素を保持することができるようになります、など

Reservations reservations = new Reservations(); 
size = rq.Reservations.Reservation.Length 
reservations.Reservation = new Reservation[size ]; 
reservations.Reservation[0] = new Reservation(); 

したい場合は、コンストラクタでそれを行うことができます:

public class Reservations 
{ 
    Reservation[] reservation {get;set;} 
    public Reservations(int size){ 
    reservation = new Reservation[size]; 
    } 
} 

その後中間ステップはもはや必要なくなります:あなたは、より高度なコレクションのリストを使用してになります

Reservations reservations = new Reservations(rq.Reservations.Reservation); 
reservations.Reservation[0] = new Reservation(); 

public class Reservations 
{ 
    List<Reservation> reservation {get;set;} 
    public Reservations(){ 
    reservation = new List<Reservation>(); 
    } 
} 

そして、あなたは配列としてそれを必要とする場合は、あなただけの

reservation.Reservations.ToArray(); 

とに行うことができますそれを挿入するでしょう

reservation.Reservations.Add(theReservation); 
+0

私はそれが間違っている可能性があります。これは元々VBで行われており、次のようになっています。reservations.Reservation(i)=新しい予約( – Xaisoft

+0

)予約は最初にインスタンス化されます。 – Xaisoft

+0

インスタンスはクラスタイプのものです – Xaisoft

1

アレイにはiよりも少ない要素が含まれているため、の理由が考えられます。 reservations.Reservation.Count()を確認してください。

1

使用動的配列(リスト< Tは>):

var reservation = new List<Reservation>(); 
reservation.Add(new Reservation()); 

配列は固定長であり、あなたはこの長さ、より多くのである位置決めに何かを追加しよう - もちろんそれはIndexOutOfRangeExceptionの原因となります。

0

同じ問題がありました。ソリューションのプロパティに移動して問題を修正しました。 Common Propertiesの下に、Debug Source Filesがあります。 「これらのソースファイルを検索しないでください」のセクションでは、デバッグに必要なファイルがありました。すべてのエントリを削除しました... BOOMを修正しました。

希望すると助かります!私はそのデバッグの問題でかなりの時間を失った。