我无法弄清楚是什么造成了这个错误
对象引用未设置为对象的实例。
描述:执行当前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;
}
}
}
答案 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个元素的数组, 每个都初始化为空引用。