为项设置属性值会导致NullReferenceException

Jim*_*nes 1 c# nullreferenceexception

基本上我要做的是在客户列表中添加一个客户,在客户列表中有一个属性BillToContact.我想为客户创建一个实例BillToContact.

public class Customer 
{
    public string  ID { get; set; }
    public string  AccountName { get; set; }
    public Contact BillToContact { get; set; }
}

public class BillToContact
{
    public string firstname { get; set; }
    public string LastName  { get; set; }
}

public class Contact
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

//下面是尝试将BillToContact添加到Customer

public void test()
{
  List<Customer> Customer = new List<Customer>();

  Customer x = new Customer();
  x.ID   = "MyId";
  x.AccountName = "HelloAccount";
  x.BillToContact.FirstName = "Jim";
  x.BillToContact.LastName  = "Bob";

  Customer.Add(x);
}
Run Code Online (Sandbox Code Playgroud)

这次尝试的错误是

你调用的对象是空的.

我也试图创建一个BillToContact内部的实例,但Customer没有成功.为了避免任何混淆,问题是我正在尝试在Customer列表中的BillToContact中创建一个实例.

Bra*_*NET 10

您必须先实例化属性成员,然后才能设置其属性:

Customer x = new Customer();
x.ID   = "MyId";
x.AccountName = "HelloAccount";
x.BillToContact = new BillToContact();
x.BillToContact.FirstName = "Jim";
x.BillToContact.LastName  = "Bob";
Run Code Online (Sandbox Code Playgroud)

只是实例化父类不会自动实例化任何组合类(除非你在构造函数中这样做).


Nat*_*oop 8

您需要实例化BillToContact

所以要么:

x.BillToContact = new BillToContact {FirstName = "Jim", LastName="Bob"};
Run Code Online (Sandbox Code Playgroud)

要么

 x.BillToContact = new BillToContact();
 x.BillToContact.FirstName = "Jim";
 x.BillToContact.LastName = "Bob";
Run Code Online (Sandbox Code Playgroud)

两者都是等价的