我有以下C#类:
public class Locales
{
public Region region { get; set; }
public Buttons buttons { get; set; }
public Fields fields { get; set; }
}
public class Region
{
public Center center { get; set; }
public East east { get; set; }
}
public class Center
{
public string title { get; set; }
}
public class East
{
public string title { get; set; }
}
public class Buttons
{
public string save { get; set; }
}
public class Fields
{
public Labels labels { get; set; }
}
public class Labels
{
public string firstName { get; set; }
public string lastName { get; set; }
public string chooseLocale { get; set; }
}
综上所述,语言环境具有“区域”,“按钮”和“字段”。区域有中心和东部。中心和东部拥有产权。字段具有具有属性firstName,lastName和choiceLocale的标签。
在一个方法(称为GetLocale)中,我有以下代码:
Locale englishLang = new Locale();
englishLang.region.center.title = "Center Region";
englishLang.region.east.title = "East Region - Form";
englishLang.buttons.save = "Save";
englishLang.fields.labels.firstName = "First Name";
englishLang.fields.labels.lastName = "Last Name";
englishLang.fields.labels.chooseLocale = "Choose Your Locale";
当我运行代码时,在行处抛出“ NullReferenceException未由用户代码处理”: englishLang.region.center.title = "Center Region";
我设置属性标题,保存,名字,姓氏和choiceLocale的方式是否做错了?我尝试在此Locale englishLang = new Locale();
之前和之后添加以下代码块,englishLang.region.center.title = "Center Region";
但仍然收到错误消息。
Region region = new Region();
Center center = new Center();
East east = new East();
Buttons buttons = new Buttons();
Fields fields = new Fields();
Labels labels = new Labels();
我究竟做错了什么?
您的Locales
对象永远不会实例化其属性,使用方代码也不会实例化它们。作为引用类型,该类中的属性的默认值为null
。因此,当您执行此操作时:
Locale englishLang = new Locale();
以下是值null
:
englishLang.region
englishLang.buttons
englishLang.fields
因此,NullReferenceException
如果您尝试取消引用这些字段,则会收到,就像您在此处所做的那样:
englishLang.region.center.title = "Center Region";
该行代码试图englishLang.region
通过引用其center
属性来取消引用。但这region
是null
因为尚未实例化。
在这些DTO类的情况下,实例化这些实例的最佳位置可能是在其构造函数中。像这样的东西:
public class Locales
{
public Region region { get; set; }
public Buttons buttons { get; set; }
public Fields fields { get; set; }
public Locales()
{
region = new Region();
buttons = new Buttons();
fields = new Fields();
}
}
这样,使用代码无需每次都手动执行,构造函数会在您每次创建的实例时自动实例化字段Locales
。自然,您将要对其他对象重复相同的模式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句