Ho bisogno di qualcosa di simile a List<String, Int32, Int32>
. Elenco supporta solo un tipo alla volta e Dizionario solo due alla volta. C'è un modo pulito per fare qualcosa come il precedente (una lista/collezione generica multidimensionale)?C'è qualcosa come List <String, Int32, Int32> (elenco generico multidimensionale)
risposta
Il modo migliore è quello di creare un contenitore per esso vale a dire una classe
public class Container
{
public int int1 { get; set; }
public int int2 { get; set; }
public string string1 { get; set; }
}
poi nel codice dove serve
List<Container> myContainer = new List<Container>();
+1 poiché non richiede una tupla .Net4 e può essere implementato banalmente con una classe, ma -1 perché è necessario evitare i campi pubblici in una classe. Implementa come una proprietà e usa semplicemente '{get; impostato;} 'invece. –
Probabilmente sarà necessario sostituire anche Equals e GetHashCode –
tipo Container dovrebbe essere una struttura immutabile poiché rappresenta solo valori. –
In .NET 4 è possibile utilizzare List<Tuple<String, Int32, Int32>>
.
Purtroppo sono su .NET 3.5, ma terrò questo a mente per 4.0! – Alex
Beh, non si può fare questo fino C# 3.0, usa Tuples se puoi usare C# 4.0 come menzionato in altre risposte.
Tuttavia in C# 3.0 - creare un Immutable structure
e avvolgere le insanze di tutti i tipi all'interno della struttura e passare il tipo di struttura come argomento di tipo generico all'elenco.
public struct Container
{
public string String1 { get; private set; }
public int Int1 { get; private set; }
public int Int2 { get; private set; }
public Container(string string1, int int1, int int2)
: this()
{
this.String1 = string1;
this.Int1 = int1;
this.Int2 = int2;
}
}
//Client code
IList<Container> myList = new List<Container>();
myList.Add(new Container("hello world", 10, 12));
Se siete curiosi perché creare le strutture immutabili - checkout here.
In base al tuo commento, sembra che tu abbia bisogno di una struttura con due numeri interi memorizzati in un dizionario con una chiave di stringa.
struct MyStruct
{
int MyFirstInt;
int MySecondInt;
}
...
Dictionary<string, MyStruct> dictionary = ...
Ciò presuppone che le stringhe siano intese come uniche. –
La duplicazione di Int32 è interessante. Cosa stai cercando di fare? –
Devo associare semanticamente due numeri diversi con una stringa, che verrà quindi utilizzata per il rendering dei dati in una vista. – Alex
Penso che @Alex abbia lo sfondo 'java' come me. –