我有以下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; }
}
总而言之,区域设置有区域、按钮和字段。区域有中心和东部。中心和东部拥有产权。Fields包含具有属性firstName、lastName和ChooseLocale的标签。
在一个名为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 was unhandled by user code”:EnglishLang.Region.Center.Title=“Center Region”;
我设置属性title、save、firstName、lastName和chooselocale的方式是否做错了什么?我尝试在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";
该行代码试图通过引用其center
属性来取消引用EnglishLang.Region
。但是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
实例,就会由构造函数自动实例化字段。当然,您会希望对其他对象重复相同的模式。
我需要将一些html转换为PDF。我遇到了IText7,它看起来是一个很好的解决方案。 我正在. net core 3.1中开发 但是,即使使用它的基本实现,我也会遇到一个错误: 每个人都喜欢这个错误: 对象引用未设置为对象的实例。 内部异常为null,唯一的线索是SerializationStackTraceString是: 在iText. IO. FontCache. cctor() 那么,它
是否有建议使用具有段落的单元格构建表,以避免在向表或文档添加单元格时出现异常?我明白了,但我不知道会发生什么: 以下是使用Windows控制台项目的简单快照(与实际项目相比): 注意,注释的代码行: 添加它可以作为一种变通方法,使文档能够毫无例外地呈现。
我试图在Windows控制台应用程序中下载azure Blob。当我构建和调试应用程序时,我的azure连接字符串引发了一个异常。这个字符串在我的其他ASP.NET应用程序中工作得很好。
在我的ASP.NET程序中。我设置了一个受保护的列表。我在列表中添加了一个值。但它显示对象引用未设置为对象错误的实例 如何解决这个错误?
创建新的PDF文档时会发生以下情况。在第三页上创建第一个文本字段时出错。前两页上创建了多个字段,没有问题。 相关代码: 插入pdfPage。冲洗();在“PdfPage PdfPage=pdfDoc.AddNewPage(pageSize);”之后语句在将第一个文本框添加到第一页时会导致相同的错误。 如何更正错误?
我无法从web服务获得响应,它将故障代码显示为soap:server,将故障字符串显示为server无法处理请求 02-22 12:41:08.008:带系统。err(860):SoapFault-faultcode:“soap:Server”faultstring:“服务器无法处理请求---