如何尽可能清楚地初始化const/static数组结构?
class SomeClass { struct MyStruct { public string label; public int id; }; const MyStruct[] MyArray = { {"a", 1} {"b", 5} {"q", 29} }; };
Jon Skeet.. 51
首先,你真的必须拥有一个可变的结构吗?他们是邪恶的.同样公共领域.
除此之外,我只是创建一个构造函数来获取两位数据:
class SomeClass { struct MyStruct { private readonly string label; private readonly int id; public MyStruct (string label, int id) { this.label = label; this.id = id; } public string Label { get { return label; } } public string Id { get { return id; } } } static readonly IListMyArray = new ReadOnlyCollection (new[] { new MyStruct ("a", 1), new MyStruct ("b", 5), new MyStruct ("q", 29) }); }
注意使用ReadOnlyCollection而不是暴露数组本身 - 这将使它不可变,避免直接暴露数组的问题.(代码show会初始化一个结构数组 - 然后它只是将引用传递给构造函数ValueTuple
.)
首先,你真的必须拥有一个可变的结构吗?他们是邪恶的.同样公共领域.
除此之外,我只是创建一个构造函数来获取两位数据:
class SomeClass { struct MyStruct { private readonly string label; private readonly int id; public MyStruct (string label, int id) { this.label = label; this.id = id; } public string Label { get { return label; } } public string Id { get { return id; } } } static readonly IListMyArray = new ReadOnlyCollection (new[] { new MyStruct ("a", 1), new MyStruct ("b", 5), new MyStruct ("q", 29) }); }
注意使用ReadOnlyCollection而不是暴露数组本身 - 这将使它不可变,避免直接暴露数组的问题.(代码show会初始化一个结构数组 - 然后它只是将引用传递给构造函数ValueTuple
.)
你在使用C#3.0吗?你可以像这样使用对象初始化器:
static MyStruct[] myArray = new MyStruct[]{ new MyStruct() { id = 1, label = "1" }, new MyStruct() { id = 2, label = "2" }, new MyStruct() { id = 3, label = "3" } };