【问题标题】:NullReferenceException on method call C#方法调用 C# 上的 NullReferenceException
【发布时间】:2012-01-12 09:11:16
【问题描述】:

我有以下代码:

DataGridModel[] raport = new DataGridModel[100];
... // more code here, nothing relevant
raport[i].populate(param1,param2); // NullReferenceException occurs here

我的DataGridModel 类有一个空的构造函数,所以那里什么也没做。

当我查看raport 变量时,它包含100 次null,但为什么呢?因为我用new DataGridModel[100]初始化它。

如果我丢失了第一行中的对象数组(所以只有一个实例),代码效果很好。

我不明白为什么它们为空。有什么帮助吗?

【问题讨论】:

  • 你的意思是raport[x].populate(param1, param2)
  • @kendfrey 是的,这就是我在我的代码中使用它的方式,我只是复制错了 :) 抱歉。

标签: c# oop class nullreferenceexception


【解决方案1】:

您使用new DataGridModel[100] 对其进行了初始化,它创建了一个实例——但它是一个包含100 个null 元素的数组实例。

我不确定您所说的raport.populate 是什么意思 - 我想这是一种扩展方法? - 但您可以通过以下方式解决您的问题:

DataGridModel[] raport = new DataGridModel[100];

for(int i = 0; i < raport.Length; i++) {
    raport[i] = new DataGridModel();
}

// ...

raport.populate(param1, param2);

【讨论】:

  • 好东西。我应该知道的。谢谢!
【解决方案2】:
DataGridModel[] raport = new DataGridModel[100];

这会初始化一个数组,只是说“它将有 100 个项目”,仅此而已。您必须手动调用每个元素的构造函数:

for(int i = 0; i < raport.Length; i++)
    raport[i] = new DataGridModel();

【讨论】:

    【解决方案3】:

    new DataGridModel[100] 创建一个数组,其中包含 100 个对 DataGridModel 对象的引用。

    您仍然需要创建这些对象。

    【讨论】:

      【解决方案4】:

      当您创建一个引用类型的新数组时,您只是将一个 references 数组分配给该类型。因此,您有 100 个对 DataGridModel 的空引用。

      您需要遍历数组并实例化DataGridModels。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 2013-11-11
        • 1970-01-01
        相关资源
        最近更新 更多