2012-12-07 67 views
0

可能重复:
Adding C# labels to a form at Runtime对象引用不设置到对象W的实例/阵列

我不能找出正在此错误

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

描述:执行当前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; 
     } 
    } 
} 

回答

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; 
     } 
} 

看来这行是一个类(引用类型)如果您创建引用类型的数组,则数组中的所有元素得到的null的默认值,并可以不要在null对象上调用实例方法。

Example from MSDN - Single Dimension Arrays

SomeType[] array4 = new SomeType[10]; 

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

+0

如果downvoter可以指出错误会很好。 – Habib

相关问题