在对象实例上找不到方法

时间:2011-06-20 20:49:43

标签: c#

我有一个名为Reservations的对象。在Reservations内,还有另一个名为Reservation的对象,它是一个数组。

当我做以下事情时:

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

我收到以下错误:

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

我注意到的一些事情是,当我到达这一点时,它会抛出一个IndexOutOfRangeError,如果我将鼠标悬停在预留变量上,它会显示一个数字。

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是请求。

4 个答案:

答案 0 :(得分:2)

你的专栏:

reservations.Reservation = new Reservation[0];

会创建一个最大长度为0的数组吗?哪个基本上是非空的,但是空的..

您需要实例化reservations.Reservation数组(SIZE将是您想要的大小)。从你的长度来看,你不需要-1。如果指定new Array [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);

答案 1 :(得分:1)

IndexOutOfRangeException的原因很可能是因为reservations.Reservation[i]数组包含的元素少于i。 检查reservations.Reservation.Count()

答案 2 :(得分:1)

使用动态数组(List&lt; T&gt;):

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

数组有一个固定的长度,如果你尝试向位置添加一些超过这个长度的东西 - 当然它会导致IndexOutOfRangeException。

答案 3 :(得分:0)

有同样的问题。通过进入我的解决方案属性来解决问题。在Common Properties下,有Debug Source Files。在“不要查找这些源文件”部分中,我有一个调试所需的文件。删除了所有条目... BOOM已修复。

希望它有所帮助!我在调试问题上花了很多时间。