Comment puis-je initialiser un tableau const/statique de structures aussi clairement que possible?
class SomeClass
{
struct MyStruct
{
public string label;
public int id;
};
const MyStruct[] MyArray = {
{"a", 1}
{"b", 5}
{"q", 29}
};
};
Premièrement, est-ce que vous vraiment devez avoir une structure mutable? Ils sont diaboliques. De même les champs publics.
En dehors de cela, je créerais simplement un constructeur prenant les deux bits de données:
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)
});
}
Notez l'utilisation de ReadOnlyCollection au lieu d'exposer le tableau lui-même - cela le rendra immuable, en évitant le problème qui expose directement les tableaux . (Le code show initialise un tableau de structures - il passe alors simplement la référence au constructeur de ReadOnlyCollection<>
.)
Utilisez-vous C # 3.0? Vous pouvez utiliser les initialiseurs d’objets comme suit:
static MyStruct[] myArray =
new MyStruct[]{
new MyStruct() { id = 1, label = "1" },
new MyStruct() { id = 2, label = "2" },
new MyStruct() { id = 3, label = "3" }
};
Vous ne pouvez pas initialiser par défaut des types de référence autres que null. Vous devez les faire en lecture seule. Donc, cela pourrait fonctionner;
readonly MyStruct[] MyArray = new MyStruct[]{
new MyStruct{ label = "a", id = 1},
new MyStruct{ label = "b", id = 5},
new MyStruct{ label = "c", id = 1}
};
Changez const
en static readonly
et initialisez-le comme ceci
static readonly MyStruct[] MyArray = new[] {
new MyStruct { label = "a", id = 1 },
new MyStruct { label = "b", id = 5 },
new MyStruct { label = "q", id = 29 }
};