Во-первых, вам действительно нужно иметь изменяемую структуру? Они почти всегда плохая идея. Аналогично публичным полям. Есть некоторые очень случайные контексты, в которых они разумны (обычно обе части вместе, как в 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 IList<MyStruct> MyArray = new ReadOnlyCollection<MyStruct>
(new[] {
new MyStruct ("a", 1),
new MyStruct ("b", 5),
new MyStruct ("q", 29)
});
}
Обратите внимание на использование ReadOnlyCollection вместо предоставления самого массива - это сделает его неизменяемым, избегая проблемы с непосредственным отображением массивов . (Кодовое шоу действительно инициализирует массив структур - затем он просто передает ссылку на конструктор ReadOnlyCollection<>
.)