我们的程序崩溃了,现在无法重现。我试图放入一些代码以防止再次发生,但是我对堆栈跟踪感到困惑。

System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Object.GetType()
   at Project.ViewModel.MainVM.<CreateCommands>b__8(Object a)
   at System.Windows.Controls.Button.OnClick()

-我减少了堆栈跟踪,因为它只是进入系统代码的负载,这与单击按钮有关。 -

我设法推断出它指向我的CreateCommands方法的第8行上的匿名委托(delegate)。
        this.sectionCommand = new DelegateCommand(a =>
        {
            this.OnSectionParameterChanged((Sections)a);
        }, p => this.IsSectionCommandExecutable);

我在这里看到过类似的帖子,但是OP正在显式调用GetType。我假设强制转换调用得到类型,但是在无法重现问题的情况下,我看不到什么是null。

所以我的问题是:为了使堆栈跟踪引起空引用,'a'变量是否为空对象? (所以我会写类似)
            if (a != null)
            {
                this.OnSectionParameterChanged((Sections)a);
            }

还是从“a”到“sections”的转换导致空对象? (所以我应该写类似的东西)
            if (a is Sections)
            {
                this.OnSectionParameterChanged((Sections)a);
            }

根据要求,这里是OnSectionParameterChanged
    private void OnSectionParameterChanged(Sections parameter)
    {
        this.SelectedSection = parameter;

        this.RaisePropertyChanged(() => this.SelectedSection);

        this.LoadSettingsPanel();
    }

除此之外,它还调用LoadSettingsPanel
    private void LoadSettingsPanel()
    {
        if (sectionVMs == null)
            return;

        // Get section
        SectionViewModel = sectionVMs.SingleOrDefault(s.SectionName == SelectedSection);

        this.IsSelectedSectionEnabled = this.Config.GetIsSectionEnabled(this.SelectedSection);

        this.RaisePropertyChanged(() => this.IsSelectedSectionEnabled);

        // Set advanced
        AdvancedViewModel = this.SectionViewModel;

        if (AdvancedViewModel != null)
            HasAdvanced = AdvancedViewModel.HasAdvanced;
    }

最佳答案

我所描述的问题实际上并不是真正的问题。我在另一个站点上阅读到,堆栈跟踪的< CreateCommands >b__8部分意味着问题出在CreateCommands方法的第8行。这与匿名委托(delegate)完全一致,我可以在错误报告中看到它与行为的匹配。

我实际上是通过使用IL Dasm找到了解决问题的方法(可以在



并打开运行的EXE,发现.net认为b__8实际上是什么。原来这是另一个匿名委托(delegate),它显式地调用了.GetType(),因此,一旦我知道了b__8的实际含义,该问题实际上就很容易了。

关于c# - 神秘的System.Object.GetType()NullReferenceException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31246652/

10-13 02:00