尽管调试器显示对象C#,但抛出NullReferenceException

时间:2014-03-12 20:27:59

标签: c# nullreferenceexception

我定义了以下类:

public class PerceptronNetwork : NetworkBase
{
    Neuron perceptron { get; set; }

    public PerceptronTrainer trainingMethod;

    public PerceptronNetwork(Neuron aNeuron)
    {
        this.perceptron = aNeuron;
    }

    public double train(TrainingTemplate trainingTemplate, int extMaxGenerations)
    {
        // This is simple but the ideea is suposed to be that in larger networks here
        // I do a foreach over the neurons
        double error =  this.trainingMethod.trainNetwork(trainingTemplate, perceptron,
                                                         extMaxGenerations);
        return error;
    }
}

每当我尝试使用main函数中的train方法时,我都会收到错误

Object reference not set to an instance of an object.

指向perceptron对象。

尽管当我将鼠标悬停在函数调用trainingTemplate,perceptron和extMaxGenerations中的每个对象上时,它们似乎都指向正确的值。

我是否以某种方式声明或实例化了错误?

2 个答案:

答案 0 :(得分:2)

确保实例化this.trainingMethod。从您的代码来看似乎不是。

如果是,则必须显示完整的堆栈跟踪。

答案 1 :(得分:1)

传递null参数时不会抛出NullReferenceException,当您尝试访问空引用上的成员属性/方法/字段时会抛出它。在您的情况下,这意味着this.trainingMethodnull

如果trainNetwork有验证码来验证传入的参数不是null,那么很可能会得到ArgumentNullException,其中包含指示为空的参数的名称。

如果trainNetwork尝试引用传入的空值的实例成员,则堆栈跟踪将来自该方法,而不是来自train