2010-06-08 17 views
7

Necesito algo similar a List<String, Int32, Int32>. La lista solo admite un tipo a la vez, y el diccionario solo dos a la vez. ¿Hay alguna manera clara de hacer algo como lo anterior (una lista/colección genérica multidimensional)?¿Hay algo así como Lista <String, Int32, Int32> (lista genérica multidimensional)

+0

La duplicación de Int32 es interesante. ¿Que estás tratando de hacer? –

+0

Tengo que asociar dos números diferentes semánticamente con una cadena, que luego se utilizará para representar datos en una vista. – Alex

+0

Creo que @Alex tiene antecedentes de 'java' como yo. –

Respuesta

14

mejor manera es crear un contenedor para que sea una clase

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

a continuación en el código donde se necesite

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

+1, ya que no requiere una tupla .Net4 y se puede implementar trivialmente con una clase, pero -1 porque debe evitar los campos públicos en una clase. Implementar como una propiedad y usar '' simple; set;} 'en su lugar. –

+0

Probablemente necesites anular Equals y GetHashCode también –

+1

type El contenedor debe ser una estructura inmutable ya que solo representa valores. –

13

En .NET 4 puede usar List<Tuple<String, Int32, Int32>>.

+0

Lamentablemente estoy en .NET 3.5, pero lo tendré en cuenta para 4.0. – Alex

1

Bueno, no se puede hacer esto hasta C# 3.0, use Tuples si puede usar C# 4.0 como se menciona en otras respuestas.

Sin embargo, en C# 3.0: cree un Immutable structure y ajuste las inserciones de todos los tipos dentro de la estructura y pase el tipo de estructura como argumento de tipo genérico a su lista.

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

Si tienes curiosidad por qué crear estructuras inmutables - checkout here.

0

Según su comentario, parece que necesita una estructura con dos enteros almacenados en un diccionario con una clave de cadena.

struct MyStruct 
{ 
    int MyFirstInt; 
    int MySecondInt; 
} 

... 

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

Esto supone que las cadenas están destinadas a ser únicas. –