0

可能重复:
在运行时向表单添加 C# 标签

我不知道是什么导致了这个错误

你调用的对象是空的。

说明:执行当前 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

1 回答 1

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对象上调用实例方法。

来自 MSDN 的示例 - 单维数组

SomeType[] array4 = new SomeType[10];

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

于 2012-12-07T06:07:12.060 回答