道歉可能是一个愚蠢的问题,但我想我已经把我的代码归结为核心问题,其中有两个让我疯狂。我很感激你的帮助。
在下面的代码中,第一个问题是当我的调试到达'bus [0]行时''我得到'对象引用未设置为对象的实例',即使我刚刚实例化了类在上一行。
我的下一个问题是'SystemArrays'类是一个存储库,我的所有类(例如'Solver')都可以看到它们,它们可以在这里获得& amp;设置其公共属性。但是,我无法确定如何或在何处实例化该类以使其对所有人可见。
非常感谢任何帮助。谢谢。
public Form1()
{
InitializeComponent();
}
SystemArrays newArray = new SystemArrays();
private void button1_Click(object sender, EventArgs e)
{
Bus[] bus = new Bus[3];
bus[0].elementNum = 5;
bus[1].elementNum = 8;
bus[2].elementNum = 26;
newArray.buses[0].elementNum = bus[0].elementNum;
}
public class SystemArrays
{
public Bus[] buses { get; set; }
}
public class Bus
{
public int elementNum { get; set; }
}
public class Solver
{
// int x = newArray.buses[0].elementNum;
}
答案 0 :(得分:2)
1。您正在初始化数组,而不是初始化数组中的对象,因此对象引用未设置为对象的实例异常。因此,您需要进行类似
的代码更改Bus[] bus = new Bus[3];
bus[0].elementNum = 5;
要
Bus[] bus = new Bus[3];
bus[0] = new Bus();
bus[0].elementNum = 5;
2。要使newArray
公开,请通过指定正确的保护级别(如public
)来设置正确的辅助功能,因为您需要将该类公开给其他类。此外,如果需要newArray的单个副本,则可以将其声明为静态,但如果为此类场景创建get属性则更好。
public static SystemArrays newArray = new SystemArrays();
答案 1 :(得分:1)
您将'对象引用未设置为对象的实例'异常,因为这正是发生的事情。您已创建了5个元素(总线)的数组,但尚未初始化它们。创建数组后,其所有项目都包含数组类型的默认值。在您的情况下,数组类型为Bus
(引用类型),所有引用类型的默认值为null
您可以通过简单地分配:
来初始化数组的值bus[0] = new Bus();
答案 2 :(得分:1)
问题是你要实例化数组,而不是单个实例。 您可以使用以下紧凑方式:
var buses = new Bus[3] // instantiate an array object of size 3
{
new Bus() { elementNum = 5 }, // instantiate new Bus object
new Bus() { element = 8 }, // and here
new Bus() { elementNum = 26 } // and here
};