C# 在对象实例上找不到该方法

C# 在对象实例上找不到该方法,c#,C#,我有一个名为保留的对象。在Reservation中,还有一个名为Reservation的对象,它是一个数组 当我做以下事情时: reservations.Reservation[i] = new Reservation(); //reservations if of type Reservations 我得到以下错误: 在对象实例上找不到该方法 我注意到的两件事是,当我到达这一点时,它抛出一个indexootfrangeerror,如果我将鼠标悬停在reservations变量上,它会显示一个

我有一个名为
保留
的对象。在
Reservation
中,还有一个名为
Reservation
的对象,它是一个数组

当我做以下事情时:

reservations.Reservation[i] = new Reservation(); //reservations if of type Reservations
我得到以下错误:

在对象实例上找不到该方法

我注意到的两件事是,当我到达这一点时,它抛出一个indexootfrangeerror,如果我将鼠标悬停在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#代码

VB代码和C#代码,它基于xml请求实例化数组的长度。所以在vb代码中,它是这样做的:

 ReDim reservations.Reservation(rq.Reservations.Reservation.Length - 1)
reservations.Reservation(rq.Reservations.Reservation.Length - 1).
在c代码中,它是这样做的:

 ReDim reservations.Reservation(rq.Reservations.Reservation.Length - 1)
reservations.Reservation(rq.Reservations.Reservation.Length - 1).
以上是我的问题。我需要做:

reservations.Reservation(rq.Reservations.Reservation.Length)
rq是请求。

您的线路:

reservations.Reservation = new Reservation[0];
是否将创建最大长度为0的数组?它基本上是非空的,但为空

您需要实例化reservations.Reservation数组(
SIZE
将是您想要的大小)。您不需要**从长度中减去-1。如果指定新数组[1],它将能够容纳1个元素、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.Add(theReservation);

IndexOutOfRangeException
的原因很可能是因为
Reservation.Reservation[i]
数组包含的元素少于
i
数组。 检查
Reservation.Reservation.Count()
使用动态数组(列表):

var reservation=新列表();
预订。添加(新预订());

数组有一个固定的长度,如果您试图向位置添加超过此长度的内容,当然会导致IndexOutOfRangeException。

也有同样的问题。通过进入我的解决方案属性修复了该问题。在公共属性下,有调试源文件。在“不要查找这些源文件”部分,我有一个调试所需的文件。已删除所有条目。。。吊杆固定


希望有帮助!我在调试问题上浪费了很多时间。

您是否正在尝试向阵列中添加新的保留?
i
是否在该数组的边界之外?i为零,但分配后,i是一个长数字,我不知道它来自何处。数组不是可以分配保留的字典。保留[i]=new Reservation();如果你想得到答案,就发布所有的代码。我会用vb代码更新帖子,然后用我做的c代码代替。我可能做错了。这最初是在vb中完成的:reservations.Reservation(i)=New Reservation()reservations在开始时被实例化。我会查看列表,但我现在被一些疯狂的代码卡住了。在c#中实例化时,对于vb,在处理arraysOk时,我还必须从1开始,而不是从0开始。我将用额外的代码通过post进行更新。让我知道它是否有意义。更新代码。谢谢你给我指出了正确的方向。
var reservation = new List<Reservation>();
reservation.Add(new Reservation());