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

C#中如何将多个Data字段的声明与初始化合并为单行?

问题

异常信息:未将对象引用设置到对象的实例。
如何将以下多个C#字段的声明与初始化操作合并为单行代码?

示例代码:

private Data model1 = new Data { M1 = 0, M2 = 0 };
private Data model2 = new Data { M1 = 0, M2 = 0 };
private Data model3 = new Data { M1 = 0, M2 = 0 };
private Data model4 = new Data { M1 = 0, M2 = 0 };
private Data model5 = new Data { M1 = 0, M2 = 0 };
....

期望的写法示例:

private MyData model1, model2, model3, model4, model5 = new MyData {Max = 0, Min = 0};
解答

你期望的写法存在陷阱:这种语法里只有最后一个变量model5会被初始化,model1到model4都会保持默认的null值,这正是触发“未将对象引用设置到对象的实例”异常的原因。

要在单行完成所有字段的声明和初始化(每个字段都拥有独立的Data实例),需要为每个字段单独赋值,写法如下:

private Data model1 = new Data { M1 = 0, M2 = 0 }, model2 = new Data { M1 = 0, M2 = 0 }, model3 = new Data { M1 = 0, M2 = 0 }, model4 = new Data { M1 = 0, M2 = 0 }, model5 = new Data { M1 = 0, M2 = 0 };

如果觉得重复代码冗余,可以封装一个创建默认Data实例的方法来简化:

private Data CreateDefaultData() => new Data { M1 = 0, M2 = 0 };

private Data model1 = CreateDefaultData(), model2 = CreateDefaultData(), model3 = CreateDefaultData(), model4 = CreateDefaultData(), model5 = CreateDefaultData();

另一种更简洁的方案是用数组或集合来管理这些实例,避免声明大量单独字段:

// 注意:如果所有实例可以共享同一个引用(不修改实例属性),可以用Repeat
private Data[] models = Enumerable.Repeat(new Data { M1 = 0, M2 = 0 }, 5).ToArray();

// 如果每个实例需要独立(各自拥有自己的属性值),改用Select创建新实例
private Data[] models = Enumerable.Range(0,5).Select(_ => new Data { M1 = 0, M2 = 0 }).ToArray();

内容的提问来源于stack exchange,提问作者st27

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:40:24