控制器中无法为子模型EntryOneModel的Code属性赋值求助
为什么无法在对象初始化器中为
EntryOneModel.Code赋值? 这个问题的核心在于C#对象初始化器的语法规则以及引用类型的默认值特性。让我一步步给你拆解清楚:
问题根源
EntryOneModel是WOLFormViewModel中的一个引用类型属性(公共类),当你创建WOLFormViewModel实例时,这个属性默认是null——它还没有被实例化出来。你直接尝试给一个null对象的Code属性赋值,不仅语法上不被允许,就算编译通过,运行时也会抛出NullReferenceException。
你的错误写法回顾
var model = new WOLFormViewModel { LastS= 0, Start = sitecustomattributes.Start, End = sitecustomattributes.End, PrimeSel = false, ADFSel = false, SupplementarySel = false, BondSel = false, SheetNo = 0, EntryOneModel.Code = 1234 // 这里的问题:EntryOneModel还没被实例化,是null };
正确的两种解决写法
1. 在对象初始化器中嵌套初始化EntryOneModel
你需要先通过new EntryOneModel()实例化这个子对象,然后在它的初始化器里给Code赋值:
var model = new WOLFormViewModel { LastS= 0, Start = sitecustomattributes.Start, End = sitecustomattributes.End, PrimeSel = false, ADFSel = false, SupplementarySel = false, BondSel = false, SheetNo = 0, EntryOneModel = new EntryOneModel { Code = 1234 } // 先实例化子对象,再赋值其属性 };
2. 提前在WOLFormViewModel的构造函数中初始化EntryOneModel
如果你的业务逻辑里,EntryOneModel总是需要被初始化,那可以在WOLFormViewModel的构造函数里提前创建它的实例:
public class WOLFormViewModel { public EntryOneModel EntryOneModel { get; set; } public WOLFormViewModel() { // 构造函数中提前初始化子对象,避免为null EntryOneModel = new EntryOneModel(); } // 其他属性定义... }
这样之后,你就可以在对象初始化器中直接给EntryOneModel.Code赋值了:
var model = new WOLFormViewModel { LastS= 0, // 其他属性赋值... EntryOneModel.Code = 1234 // 现在EntryOneModel已经被构造函数实例化,不会为null };
总结
一句话概括:引用类型属性默认是null,必须先实例化这个属性对象,才能访问它的子属性。对象初始化器支持嵌套的初始化逻辑,只要你先把子对象的实例创建出来就行。
内容的提问来源于stack exchange,提问作者mgh75
相关产品推荐
相关产品推荐

