【问题标题】:Object reference not set to an instance of an object. NullReferenceException was enhandled [duplicate]你调用的对象是空的。 NullReferenceException 已处理 [重复]
【发布时间】:2014-04-15 08:32:54
【问题描述】:

以下代码在主题行中创建错误消息。能否请你帮忙?我正在尝试将下面的类实例化为一个对象。我认为错误是由我试图声明的数组引起的。

class DataStuff
{
    public double G { get; set; }
    public double[,] M { get; set; }

    public void UpdateData()
    {
        G = 500;
    }

    public void UpdateMatrixData()
    {
        for(int i=0; i<2; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                M[i, j] = i + j;
            }
        }
    }

}

【问题讨论】:

  • 你知道是哪一行导致了异常吗?
  • 你没有说错误在哪里。但我会猜测并说它在M[i, j] = i + j; 中,因为您从未创建过数组(使用新的)。
  • 都在报错,不先初始化就不能使用M,使用调试器....

标签: c# arrays object instantiation


【解决方案1】:

你应该创建M[,]矩阵实例在使用之前它:

class DataStuff {
  ...
  // M is null; an instance should be created 
  // Usually, "private set;" instead of "set" is a better design
  public double[,] M { get; set; } 

  public DataStuff() {
    M = new Double[2, 2]; // <- M is created in the constructor
  } 
  ...
}
...
DataStuff test = new DataStuff();
test.UpdateMatrixData(); 

【讨论】:

  • 德米特里,那么 public double G { get;放; }?我不需要对它做任何事情吗?是不是因为M是一个数组,不一样?
  • double是值类型,可以直接使用。数组(任何东西)是一种引用类型,必须是newed。
  • @Ujae Kang:Double 输入Double G 是一个结构,而不是类(就像数组一样),所以你不需要创建G。其实G会被初始化为0.0
  • 究竟如何使用 M 作为属性和数组..?这是错误的代码!
  • @HackerMan:您可以在属性中使用任何类型(包括数组)。不是那么好的设计,但仍然是可能的。
【解决方案2】:
    for (int j = 0; j < 2; j++)
    {
        M[i, j] = i + j;//if you are trying to access the property..this is wrong!
//you cant access the property like an array
    }

如果你想访问像数组这样的属性,请使用索引器

public double[,] this[int i,int j]
{
get;
set;//enter your code here!
}

【讨论】:

  • 我正在尝试访问该属性
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 2012-01-02
  • 2013-05-27
  • 2013-07-22
相关资源
最近更新 更多