NullReferenceException,如何初始化成员类Blazor

问题描述

我的页面中有一个简单的表单,该页面绑定到模型的成员类,出现以下错误

NullReferenceException:对象引用未设置为对象的实例。

我的页面(如下所示)可以正常工作,如果我不使用Timelineinfos,但是当我引用它时,我得到了错误。所以我的问题是:我应该如何初始化Timelineinfos

<div class="row">
    <div class="col-7">
        <EditForm Model="test">
            <InputText @bind-Value="test.Timelineinfos.City"></InputText>
        </EditForm>
    </div>
</div>

@code {
    public testmodel test = new testmodel();

    public class testmodel
    {
        public string Name { get; set; }
        public Timelineinfo Timelineinfos { get; set; }
    };
}

解决方法

发生异常的原因是,我们尚未初始化Timelineinfos的值,将其保留为null,然后尝试通过绑定test.Timelineinfos.City来访问其成员。因为没有Timelineinfos的实例,所以等于null.City,这毫无意义。

您可以通过多种方式初始化该值。

使用对象初始化程序通过构造函数:

public testmodel test = new testmodel() { Timelineinfos = new Timelineinfo() };

...是以下内容的语法糖:

testmodel test = new testmodel();
test.Timelineinfos = new Timelineinfo();

通过为属性实现默认值:

public Timelineinfo Timelineinfos { get; set; } = new Timelineinfos();

...本质上与在默认(无参数)构造函数中设置它们相同:

public testmodel()
{
    this.Timelineinfos = new Timelineinfos();
}

无论如何,一旦有了实例,您的NullReferenceException就不会再出现了。