我在分配数组时遇到问题?

时间:2012-07-27 16:06:21

标签: c#

我遇到了这段代码的麻烦,我无法弄清楚如何让它工作。我无法弄清楚问题是什么,看起来它应该工作。两个地方名为m_nameList的字符串数组都标记为'非静态字段,方法或属性所需的对象引用'Solutionname.classname.m_nameList'

代码:

    public static bool CheckVacantSeats(int seatNumber)
    {            
        if (m_nameList[seatNumber] == null)
      {
          return true;
      }
      return false;
    }

m_nameList是一个在此静态bool之前在构造函数中声明的数组:

     public SeatManager(int maxNumberOfSeats)
    {
        m_totNumOfSeats = maxNumberOfSeats;
        m_nameList = new string[m_totNumOfSeats];
        m_priceList = new double[m_totNumOfSeats];
    }   

我从另一个类调用CheckVacantSeat:

  bool validSeats = SeatManager.CheckVacantSeats(seatNumber, m_nameList);    

我无法弄清楚它有什么问题。所以我需要一些帮助来弄清楚为什么m_nameList对我不起作用?

提前致谢!!

//此致

4 个答案:

答案 0 :(得分:5)

问题是您已将方法标记为静态。由于它是静态的,因此它具有“no”状态,并且不能访问未标记为静态的类成员。

您可以将m_nameList标记为静态,但这意味着它的值在所有读取和写入之间共享。 m_nameList看起来像一个简单的查找表,所以这可能是你想要的吗?

推荐阅读为staticStatic Classes and Static Members

答案 1 :(得分:1)

您的函数是静态的,但您的变量不是静态的。

答案 2 :(得分:1)

启动时你的通话是错误的,你的方法CheckVacantSeats只接受一个参数,所以你不能用两个来调用它!??

CheckVacantSeats(int seatNumber)
SeatManager.CheckVacantSeats(seatNumber, m_nameList); 

你的方法也是静态的,因此没有必要使用构造函数。

我认为你的追求是什么:

SeatManager seatManager = new SeatManager(maxNumberOfSeats);
seatManager.CheckVacantSeats(seatNumber);

同时

public bool CheckVacantSeats(int seatNumber)
    {            
        if (m_nameList[seatNumber] == null)
      {
          return true;
      }
      return false;
    }

答案 3 :(得分:1)

您正在混合两个概念:使用构造函数初始化的实例和使用静态成员的静态类。您不能指望静态成员方法访问非静态字段。我猜你的m_nameList字段也是静态的,否则你的代码甚至都不会编译。您应该选择以下两种方式:

  1. 使所有SeatManager的成员都是非静态的;
  2. SeatManager类转换为静态类,其中所有成员都是静态的。
  3. 由于您需要使用总座位数初始化SeatManager,因此更好的方法似乎是否定(1)。然后,您将调用SeatManager.CheckVacantSeats()之类的实例,而不是mySeatManager.CheckVacantSeats()。即使总是只有一个SeatManager实例 - 一个单例 - 这种方法更好。使用单身人士,您最终可以在public static SeatManager Instance { get; set; }中使用SeatManager属性,并按照以下方式使用SeatManager.Instace.CheckVacantSeats()。这通常称为singleton pattern