当前位置: 首页 > 编程语言 > C#

NullReferenceExceptionwasnothandledbyusercode–objectreferencenotsettoaninstanceofanobject分享

时间:2023-04-10 21:47:53 C#

NullReferenceExceptionwasnothandledbyusercode–objectreferencewasnotsettoaninstanceofanobject我有以下C#类:公共类语言环境{公共}公共按钮按钮{get;放;}publicFields字段{get;放;}}publicclassRegion{publicCentercenter{get;放;}publicEasteast{get;放;}}}}publicclassEast{publicstringtitle{get;放;}}publicclassButtons{publicstringsave{get;放;}}publicclassFields{publicLabelslabels{get;放;}}publicclassLabels{publicstringfirstName{get;放;}publicstringlastName{get;放;}publicstringchooseLocale{get;区域是中心和东部。中部和东部有产权。字段的标签具有firstName、lastName和chooseLocale属性。在一种方法(称为GetLocale)中,我有以下代码:LocaleenglishLang=newLocale();englishLang.region.center.title="中心区域";englishLang.region.east.title="东部地区-表格";englishLang.buttons.save="保存";englishLang.fields.labels.firstName="名字";englishLang.fields.labels.lastName="姓氏";;当我运行代码时,它会在以下行抛出“NullReferenceExceptionenglishLang.region.center.title=“CenterRegion”;用户代码处理”:englishLang.region.center.title=“CenterRegion”;我以错误的方式设置属性title、save、firstName、lastName和chooseLocale?我尝试在LocaleenglishLang=newLocale();之后添加以下代码块;语言环境englishLang=newLocale();inenglishLang.region.center.title="中心区域";但我仍然得到错误。区域region=newRegion();中心center=newCenter();东东=新东();按钮buttons=newButtons();字段fields=newFields();标签labels=newLabels();我做错了什么?您的Locales对象永远不会实例化其属性,使用代码也不会实例化它们。作为引用类型,此类中的属性具有默认值null。所以当你这样做时:LocaleenglishLang=newLocale();以下值为空:englishLang.regionenglishLang.buttonsenglishLang.fields因此,如果您尝试取消引用这些字段,您将得到一个NullReferenceException,就像您在此处看到的那样englishLang.region.center.title="CenterRegion";这行代码试图通过引用其center属性来取消引用englishLang.region。但是region是空的,因为它还没有被实例化。对于这些DTO类,实例化它们的最佳位置可能是在它们的构造函数中。像这样的东西:publicclassLocales{publicRegionregion{get;放;}公共按钮按钮{get;放;}publicFields字段{get;放;}publicLocales(){region=newRegion();按钮=新按钮();字段=新字段();这样,消费代码就不必每次都手动执行,构造函数将在每次创建Locales实例时自动实例化字段。当然,您需要对其他对象重复相同的模式。您必须实例化每个对象:LocaleenglishLang=newLocale();englishLang.region=newRegion();englishLang.region.center=newCenter();englishLang.region.center.title="中心区域";等等等等...或者,您可以在父类的构造函数中实例化依赖对象。您必须在赋值之前初始化属性/子属性:LocaleenglishLang=newLocale();englishLang.region=newRegion();englishLang.region.center=newCenter();englishLang.region.center.title="中心区域";您正在使用自动属性,默认情况下它们为引用类型返回null。您需要初始化属性,可能在构造函数中:publicclassLocales{publicLocales(){this.region=newRegion();this.buttons=newButtons();this.fields=newFields();}publicRegion区域{get;放;}公共按钮按钮{get;放;}publicFields字段{get;放;您还需要向其他类添加类似的代码。以上是C#学习教程:NullReferenceExceptionisnothandleedbytheusercode–theobjectreferenceisnotsetasanobject.收藏不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: