C#如何修改自定义类以支持类似多维数组的语法初始化类数组
实现方案
这种初始化语法完全可以实现,只需要对应调整类定义即可,具体方案如下:
方案1:仅修改类构造函数(最常用)
只需要给PossibleSettingsData新增一个3参数的构造函数,参数顺序和你初始化时传入的顺序对应即可:
public class PossibleSettingsData { public int Value { get; set; } public string Definition { get; set; } public object Meaning { get; set; } // 新增对应参数的构造函数 public PossibleSettingsData(int value, string definition, object meaning) { Value = value; Definition = definition; Meaning = meaning; } }
初始化时只需要补全每个元素的new关键字就可以正常使用,写法如下:
var PossibleSettings = new PossibleSettingsData[] { new PossibleSettingsData(5 ,"4800 baud", 4800), new PossibleSettingsData(6 ,"9600 baud", 9600), new PossibleSettingsData(7 ,"19200 baud" ,19200) };
方案2:完全匹配你写的省略new的初始化语法
如果你一定要实现完全不用写new、只用花括号包裹参数的写法,和Dictionary的初始化语法完全一致,可以通过自定义集合类实现,底层逻辑和Dictionary的初始化规则相同:只要类实现了IEnumerable接口,且存在对应参数的Add方法,就可以用该语法。
- 先自定义集合类:
public class PossibleSettingsDataCollection : IEnumerable<PossibleSettingsData> { private readonly List<PossibleSettingsData> _data = new List<PossibleSettingsData>(); // 对应参数的Add方法 public void Add(int value, string definition, object meaning) { _data.Add(new PossibleSettingsData(value, definition, meaning)); } public IEnumerator<PossibleSettingsData> GetEnumerator() => _data.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => _data.GetEnumerator(); // 提供转数组方法 public PossibleSettingsData[] ToArray() => _data.ToArray(); }
- 直接使用你想要的语法初始化:
var PossibleSettings=new PossibleSettingsDataCollection { { 5 ,"4800 baud", 4800}, { 6 ,"9600 baud", 9600}, { 7 ,"19200 baud" ,19200} }.ToArray();
说明
- 原生C#数组没有内置对应多参数的
Add方法,所以无法直接对数组使用完全省略new的花括号初始化语法,必须通过自定义集合类中转 - 无特殊需求优先使用方案1,性能更高、代码更简洁
内容的提问来源于stack exchange,提问作者mohammad
相关产品推荐
相关产品推荐

