“对象引用未设置为对象的实例”是什么意思?

时间:2010-07-14 07:07:11

标签: c#

string[] splitstr = 
            this.strArraylist1[this.comboBox1.SelectedIndex].Split(delimeter, 5);
this.textBox4.Text = splitstr[1];

在此声明中,我收到错误:

  

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

6 个答案:

答案 0 :(得分:2)

我猜strArraylist1null,或者其中一项是null。如果您尝试对null的某个方法执行某个方法,那么您将收到该错误。

例如,这会将 Object引用设置为未设置为对象的错误。

string[] strArrayList1 = new string[] { null, "Bar" };
string result = strArrayList[0].Split(delimeter, 5); // Error will occur here

以下工作正常:

string[] strArrayList1 = new string[] { "Foo", "Bar" };
string result = strArrayList1[0]; // Result will be "Foo"

其他可能性是comboBox1textBox4为空。虽然因为它们可能是你表单上的控件,但这不太可能,所以我的赌注是strArrayList1是罪魁祸首,所以检查strArrayList1的内容。如果你在空项目上调用Split,根据我的例子,这将是罪魁祸首。

答案 1 :(得分:1)

你有一个System.NullReferenceException。其中一个对象是null,无法使用:

  • strArraylist1
  • comboBox1
  • textBox4

使用调试器,设置断点,将鼠标悬停在每个对象上以查看其中一个。一旦找到它,请确保在您使用它时进行实例化。

答案 2 :(得分:0)

这意味着this.strArraylist1[this.comboBox1.SelectedIndex]的结果为null,因此当您尝试调用.Split(delimeter, 5)时,它所调用的对象为null,因此是异常。

答案 3 :(得分:0)

“未将对象引用设置为对象的实例”意味着您尝试使用与变量关联的值作为对象引用,但该值为null,而不是指向对象。这意味着你对该假定对象所做的任何操作都不起作用,因为你实际上在做:null.Something()

考虑一下:

string[] splitstr = null;
this.textBox4.Text = splitstr[1];

这不起作用,因为变量 splitstr 不包含对象,它保持为null。 然后,当你继续做splitstr [1]时,你有效地尝试执行null [1] - 这是行不通的,因为null不是一个数组,更不用说其中至少有两个元素。

在您的示例中,您可以将空值存储在:

strArraylist1 this.comboBox1 strArraylist1 [this.comboBox1.SelectedIndex] this.textBox4

您的代码的另一个潜在问题是您可能会超出数组 splitstr strArraylist1 的界限。

检查:

splitstr 将始终至少包含两个元素(因为[1]) 并且strArraylist1将始终保持足以容纳this.comboBox1.SelectedIndex生成的数字。

答案 4 :(得分:0)

在给定代码的第一行添加断点,并查找空值或索引超出范围。这应该可以为您提供捕获错误的线索。

答案 5 :(得分:0)

我在WPF中遇到这个问题,我的问题是由root引起的,而不是使用项目根,它是使用类的根,所有在类中可见的对象但它没有通过类根当我调用它时,绕过它的方法是通过类中的函数包含对象。

//Class 
public void call(object b)
    {
     //Do stuff
    }
//main Thread 
 Core Menu = new Core();
 Menu.call(Object);