Ho una lista statica di grandi dimensioni che è fondamentalmente una tabella di ricerca, quindi inizializzo la tabella in codice.Utilizzo della sintassi di inizializzatore della raccolta su tipi personalizzati?
private class MyClass
{
private class LookupItem
{
public int Param1 { get; set; }
public int Param2 { get; set; }
public float Param2 { get; set; }
public float Param4 { get; set; }
}
private static List<LookupItem> _lookupTable = new List<LookupItem>()
{
new LookupItem() { Param1 = 1, Param2 = 2, Param3 = 3 Param4 = 4 },
new LookupItem() { Param1 = 5, Param2 = 6, Param3 = 7 Param4 = 8 },
//etc
}
}
Il vero LookupItem
ha molte più proprietà, così ho aggiunto un costruttore per consentire un formato di inizializzazione più compatto:
private class MyClass
{
private class LookupItem
{
public int Param1 { get; set; }
public int Param2 { get; set; }
public float Param2 { get; set; }
public float Param4 { get; set; }
public LookupItem(int param1, int param2, float param3, float param4)
{
Param1 = param1;
Param2 = param2;
Param3 = param3;
Param4 = param4;
}
}
private static List<LookupItem> _lookupTable = new List<LookupItem>()
{
new LookupItem(1, 2, 3, 4),
new LookupItem(5, 6, 7, 8),
//etc
}
}
Quello che mi piacerebbe davvero fare è utilizzare la collezione initialiser formato per l'oggetto stesso così posso liberarmi di new LookupItem()
su ogni linea. es .:
private static List<LookupItem> _lookupTable = new List<LookupItem>()
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
//etc
}
È possibile? Mi piace pensare che sia perché lo KeyValuePair
di un Dictionary<>
può essere inizializzato in questo modo.
MSDN Uniti:
initializers Collection consentono di specificare uno o più elementi intializers quando si inizializza una classe collezione che implementa IEnumerable . Gli inizializzatori dell'elemento possono essere un valore semplice, un'espressione o un inizializzatore di oggetto. Utilizzando un inizializzatore di raccolta non è necessario specificare più chiamate al metodo Aggiungi della classe nel codice sorgente; il compilatore aggiunge le chiamate.
Ciò significa che è necessario implementare IEnumerable
nella mia classe LookupItem
e restituire ciascun parametro? La mia classe non è però una classe di raccolta.
Fantastico. Grazie mille. – GazTheDestroyer