2010-06-08 20 views
7

gibi bir şey var mı? List<String, Int32, Int32> benzeri bir şeye ihtiyacım var. Liste, bir seferde yalnızca bir türü ve bir seferde yalnızca iki dili destekler. Yukarıdaki gibi bir şey yapmak için temiz bir yol var mı (çok boyutlu bir genel liste/koleksiyon)?Liste <String, Int32, Int32> (çok boyutlu genel liste)

+0

Int32'nin çoğaltılması ilginçtir. Ne yapmaya çalışıyorsun? –

+0

İki farklı sayıyı tek bir dizeyle semantik olarak ilişkilendirmem gerekiyor, bu da verileri bir görünümde işlemek için kullanılacaktır. – Alex

+0

Sanırım @Alex benim gibi java'nın geçmişine sahip. –

cevap

14

iyi yolu, bu 3.0 C# til yapamaz, bir sınıf

public class Container 
{ 
    public int int1 { get; set; } 
    public int int2 { get; set; } 
    public string string1 { get; set; } 
} 

o zaman

List<Container> myContainer = new List<Container>(); 
+4

+1, .Net4 tuple gerektirmediğinden ve bir sınıfla basitçe uygulanabilir, ancak bir sınıftaki genel alanlardan kaçınmanız gerektiğinden -1. Bir mülk olarak kullanın ve basit kullanın {get; yerine;} 'yerine. –

+0

Muhtemelen Equals ve GetHashCode'u da geçersiz kılmanız gerekecektir. –

+1

tipi Kapsayıcı, yalnızca değerleri temsil ettiğinden, değişmez bir yapı olmalıdır. –

13

.NET 4'te List<Tuple<String, Int32, Int32>>'u kullanabilirsiniz.

+0

Maalesef .NET 3.5 üzerinde çalışıyorum, ancak bunu 4.0 için aklımda tutuyorum! – Alex

1

Kuyusu ihtiyaç kodunda yani bunun için bir kap yaratmaktır Diğer cevaplarda belirtildiği gibi C# 4.0 kullanabilirsiniz eğer Tuples kullanın.

Ancak C# 3.0'da - Immutable structure oluşturun ve her türün yapıdaki delillerini sarın ve yapı türünü listenize genel tür bağımsız değişken olarak iletin.

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)); 

Merak ediyorsanız neden değişmez yapılar oluşturmak - checkout here.

0

Yorumunuza dayanarak, bir dize anahtarıyla bir sözlükte depolanmış iki tamsayıya sahip bir yapıya ihtiyacınız olduğu anlaşılıyor.

struct MyStruct 
{ 
    int MyFirstInt; 
    int MySecondInt; 
} 

... 

Dictionary<string, MyStruct> dictionary = ... 
+0

Bu, dizelerin benzersiz olması gerektiğini varsayar. –