Ich brauche etwas ähnlich wie List<String, Int32, Int32>
. Die Liste unterstützt nur jeweils einen Typ und das Wörterbuch jeweils nur zwei. Gibt es einen sauberen Weg, etwas wie das oben genannte zu tun (eine mehrdimensionale generische Liste/Sammlung)?Gibt es so etwas wie Liste <String, Int32, Int32> (mehrdimensionale generische Liste)
Antwort
Der beste Weg ist es, einen Behälter für sie also eine Klasse
public class Container
{
public int int1 { get; set; }
public int int2 { get; set; }
public string string1 { get; set; }
}
dann in den Code zu erstellen, wo Sie es
List<Container> myContainer = new List<Container>();
+1, da es kein .Net4-Tupel erfordert und mit einer Klasse trivial implementiert werden kann, aber -1, weil Sie öffentliche Felder in einer Klasse vermeiden sollten. Implementieren Sie als eine Eigenschaft und verwenden Sie einfach '{get; set;} 'stattdessen. –
Sie müssen wahrscheinlich auch Equals und GetHashCode überschreiben –
Typ Container sollte eine unveränderliche Struktur sein, da es nur Werte darstellt. –
In .NET 4 können Sie List<Tuple<String, Int32, Int32>>
verwenden.
Leider bin ich auf .NET 3.5, aber ich werde dies für 4.0 beachten! – Alex
Nun benötigen, können Sie diese bis nicht tun können, C# 3.0, Verwenden Sie Tupel, wenn Sie C# 4.0 wie in anderen Antworten erwähnt verwenden können.
Jedoch in C# 3.0 - erstellen Sie eine Immutable structure
und umhüllen alle Arten von Insancen innerhalb der Struktur und übergeben Sie den Strukturtyp als generischer Typ Argument zu Ihrer Liste.
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));
Wenn Sie neugierig sind, warum unveränderliche Strukturen schaffen - checkout here.
Basierend auf Ihrem Kommentar, es klingt wie Sie brauchen eine Struktur mit zwei ganzen Zahlen in einem Wörterbuch mit einem String-Schlüssel gespeichert.
struct MyStruct
{
int MyFirstInt;
int MySecondInt;
}
...
Dictionary<string, MyStruct> dictionary = ...
Dies setzt voraus, dass die Zeichenfolgen eindeutig sein sollen. –
Die Duplizierung von Int32 ist interessant. Was versuchst du zu machen? –
Ich muss zwei verschiedene Zahlen semantisch mit einer Zeichenfolge verknüpfen, die dann zum Rendern von Daten in einer Ansicht verwendet wird. – Alex
Ich denke @Alex hat 'Java' Hintergrund wie ich. –