2010-06-08 4 views
7

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)

+0

Die Duplizierung von Int32 ist interessant. Was versuchst du zu machen? –

+0

Ich muss zwei verschiedene Zahlen semantisch mit einer Zeichenfolge verknüpfen, die dann zum Rendern von Daten in einer Ansicht verwendet wird. – Alex

+0

Ich denke @Alex hat 'Java' Hintergrund wie ich. –

Antwort

14

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>(); 
+4

+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. –

+0

Sie müssen wahrscheinlich auch Equals und GetHashCode überschreiben –

+1

Typ Container sollte eine unveränderliche Struktur sein, da es nur Werte darstellt. –

13

In .NET 4 können Sie List<Tuple<String, Int32, Int32>> verwenden.

+0

Leider bin ich auf .NET 3.5, aber ich werde dies für 4.0 beachten! – Alex

1

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.

0

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 = ... 
+0

Dies setzt voraus, dass die Zeichenfolgen eindeutig sein sollen. –

Verwandte Themen