C# .NET Core:如何在初始化器中让属性条件性沿用默认值
问题解决方法
你的需求是在不修改TestClass的前提下,让对象初始化器中Prop2在条件不满足时沿用类定义的默认值"val2",以下是可行的方案:
方案一:先实例化再条件赋值(推荐)
先创建对象并设置Prop1,之后仅在条件满足时修改Prop2,这样条件不满足时Prop2会保留类的默认值:
var condition = false; var test = new TestClass { Prop1 = "nonDefaultValue" }; if (condition) { test.Prop2 = valIfTrue; }
方案二:引用临时实例的默认值(不推荐,有额外开销)
通过创建一个临时的TestClass实例获取默认值,避免硬编码,但会额外生成一个对象实例:
var condition = false; var test = new TestClass { Prop1 = "nonDefaultValue", Prop2 = condition ? valIfTrue : new TestClass().Prop2 };
原代码无法实现的原因
对象初始化器的本质是在实例创建后直接给属性赋值,原代码中当condition为false时,你显式给Prop2赋值了default(string)(即null),这会覆盖类定义中Prop2的默认值"val2"。
内容的提问来源于stack exchange,提问作者user1998096
相关产品推荐
相关产品推荐

