まず、本当に変更可能な構造体が必要ですか? 彼らはほとんどの場合、悪い考えです。パブリック フィールドも同様です。それらが合理的である非常にまれなコンテキストがいくつかあります(通常、 のように両方の部分が一緒にValueTupleなります)が、私の経験ではかなりまれです。
それ以外は、2 ビットのデータを受け取るコンストラクターを作成するだけです。
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<>。)