对象引用未设置为具有数组的对象的实例

时间:2012-12-07 06:05:04

标签: c#

  

可能重复:
  Adding C# labels to a form at Runtime

我无法弄清楚是什么造成了这个错误

  

对象引用未设置为对象的实例。

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

代码:

Line[] myLine = new Line[10];
int lineCount = 0;
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
    if (checkBox1.CheckState == CheckState.Checked)
    {
        myLine[lineCount].setPoint(new Point(e.X, e.Y));
        ++pointCount;
        if (pointCount == 2)
        {
            pointCount = 0;
            ++lineCount;
        }
    }
}

1 个答案:

答案 0 :(得分:4)

问题在这里

myLine[lineCount].setPoint(new Point(e.X, e.Y));

在使用之前,您需要实例化一个新的Line类型元素。

做的:

if (checkBox1.CheckState == CheckState.Checked)
    {
        myLine[lineCount] = new Line(); //instantiate the array element
        myLine[lineCount].setPoint(new Point(e.X, e.Y));
        ++pointCount;
        if (pointCount == 2)
        {
            pointCount = 0;
            ++lineCount;
        }
}

看起来Line是一个类,(引用类型)如果你创建一个引用类型的数组,那么数组的所有元素都会得到默认值null,你不能调用实例方法在null对象上。

Example from MSDN - Single Dimension Arrays

SomeType[] array4 = new SomeType[10];
  

此语句的结果取决于SomeType是否为值   类型或引用类型。如果是值类型,则会生成语句   在创建一个包含SomeType类型的10个实例的数组中。如果SomeType   是一个引用类型,该语句创建一个包含10个元素的数组,   每个都初始化为空引用。