You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

控制器中无法为子模型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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:22