为什么我的C#对象在实例化之后为null?
我要么不知道如何在C#中实例化一个类,要么就是我在这里缺少2D矩阵的技巧。 (无论哪种方式,我都是新手,并且我限制自己每天在Stack Overflow上提出一个问题,所以使用downvotes轻松一下......)
我的程序是Win8应用程序。
我有一个有三个成员的C#类。他们是:
class CMyClass
{
public double[][] matrix1;
public double[][] matrix2;
public double[][] matrix3;
}
我尝试在我的程序中实例化它:
CMyClass myObject = new CMyClass();
然后,如果我尝试访问任何矩阵成员来读取或写入数组,我会得到一个空引用异常错误,表示该对象未实例化。我的课程中缺少什么,或者我尝试实例化对象的方式有问题吗?
答案 0 :(得分:5)
因为您还没有实例化这些项目。
class CMyClass
{
public double[][] matrix1;
public double[][] matrix2;
public double[][] matrix3;
public CMyClass()
{
matrix1 = new double[][] {};
matrix2 = new double[][] {};
matrix3 = new double[][] {};
}
}
答案 1 :(得分:3)
创建对象的实例会将其成员初始化为其默认值。对于引用类型(如数组),这意味着null。
您需要在对象构造函数中显式创建所需大小的空数组;
matrix1 = new double[4][2];
你也可以把它放在会员的声明中(但这可能很奇怪,因为你可能不知道你想要的尺寸 - 或者你可能会这么做)
答案 2 :(得分:1)
您只是实例化了CMyClass
,您还没有实例化该类的任何成员。
尝试向类中添加默认构造函数,并在构造函数中设置成员值。
public CMyClass()
{
matrix1 = new double[][] {};
...
}
答案 3 :(得分:1)
尝试使用微型控制台应用程序。
static void Main(string[] args) {
CMyClass myObject = new CMyClass();
myObject.matrix1= new double[1][] ;
myObject.matrix1[0] = new double[1];
Console.WriteLine(myObject.matrix1[0][0]);
}
答案 4 :(得分:0)
谢谢大家。这对我来说似乎是最好的解决方案:
> class CMyClass
> {
> public double[][] matrix1;
>
> public CMyClass(int x)
> {
> matrix1 = new double[x][];
> for (int i = 0; i < x; i++)
> { matrix1[i] = new double[x]; }
> }
> }
然后在程序中:
int matrixSize = 10;
CMyClass MyNewObject = new CMyClass(matrixSize);
现在我可以阅读和写入矩阵的元素 解决了! = d