2012-05-15 19 views

Respuesta

27

Por supuesto que puede crear su propia clase llamada List con tres parámetros de tipo genérico. Me gustaría fuertemente desalentarlo de hacerlo así. Confundiría al diablo a cualquiera que use su código.

En su lugar, ya sea uso List<Tuple<string, string, string>> (si está utilizando .NET 4, de todos modos) o (preferiblemente) crear su propia clase para encapsular las tres cadenas de una manera significativa, a continuación, utilizar List<YourNewClass>.

Crear su propia clase lo hará mucho más claro cuando esté escribiendo y leyendo el código. Al dar nombres a las tres cadenas diferentes involucradas, todos sabrán a qué se refieren. También puede dar más comportamiento a la clase cuando lo necesite.

+0

cómo recuperar los valores de la Lista de Tuple creada? – HotTester

+0

@HotTester: ¿a qué te refieres con recuperar los valores? – Arion

+1

@HotTester: utilice las propiedades de 'Tuple <,,>', pero será mucho menos legible que crear su propia clase. –

2

Puede usar una lista de tuples. De este modo:

List<Tuple<string, string, string>> 
3

Tal vez algo como esto:

var ls= new List<Tuple<string,string,string>>(); 
1

¿Qué tal hacer un List<Tuple<string, string, string>>?

Una mejor idea podría ser, si cada una de las cadenas tiene un significado específico, para ponerlas todas en una clase y luego crear una lista de eso.

10

Puede usar un Tuple para lograr eso.

Por ejemplo:

var list = new List<Tuple<string,string,string>>(); 

para iterar sobre los valores que lo desea, puede hacer un simple:

list.ForEach(x=>{ 
    //x is a Tuple 
    }); 

o para encuentran algunos tupple específico, posible que desee para hacer lo siguiente:

 var list = new List<Tuple<string,string,string>>{ 
     new Tuple<string,string,string>("Hello", "Holla", "Ciao"), 
     new Tuple<string,string,string>("Buy", "--", "Ciao") 
    }; 

    list.Where(x=>x.Item2 == "--"); 

Esto devolverá la última Tupla.

0

No, lamentablemente esto no funciona. Lo mejor que puede hacer es crear una lista de listas o utilizar alguna forma de implementación de la interfaz IDictionary.

Aunque, dicho esto, si tiene tres elementos de datos que pertenecen juntos de esta manera, es probable que valga la pena crear una clase para contenerlos.

Eso le daría la oportunidad de pasar una lista alrededor de su aplicación y asignar nombres significativos a cada elemento de datos. Nunca subestimes el poder de legibilidad seis meses después.

+0

En realidad, rayar eso, la solución de @Tigran no solo es mejor que la mía, sino que también me enseñó algo que no sabía . Agradable. – inksmithy

0

Puede definir una Lista e implementar las interfaces necesarias (como IList). Códigos soplan.

public class List<T1, T2, T3> : IList 
{ 

    #region IList Members 

    public int Add(object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public void Clear() 
    { 
     throw new NotImplementedException(); 
    } 

    public bool Contains(object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public int IndexOf(object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public void Insert(int index, object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public bool IsFixedSize 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public bool IsReadOnly 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public void Remove(object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public void RemoveAt(int index) 
    { 
     throw new NotImplementedException(); 
    } 

    public object this[int index] 
    { 
     get 
     { 
      throw new NotImplementedException(); 
     } 
     set 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    #endregion 

    #region ICollection Members 

    public void CopyTo(Array array, int index) 
    { 
     throw new NotImplementedException(); 
    } 

    public int Count 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public bool IsSynchronized 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public object SyncRoot 
    { 
     get { throw new NotImplementedException(); } 
    } 

    #endregion 

    #region IEnumerable Members 

    public IEnumerator GetEnumerator() 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

Sin embargo, List<Tuple<string,string,string>> se recomienda.

0
public class Listt< T, T1, T2> 
    { 
     public Listt() 
     { 

     } 
     public void Add(T item, T1 item1, T2 item3) 
     { 

     } 
    } 


public partial class MyApp : Window 
{ 

public MyApp() 

{ 

    InitializeComponent(); 

    Listt<string, string, string> customList = new Listt<string, string, string>(); 
    customList.Add("we","are","here"); 

    } 
} 
2

Por ejemplo:

var list = new List<Tuple<string, string, string>>(); 
var tuple = Tuple.Create("a", "b", "c"); 
list.Add(tuple); 

Para obtener más información, busque en MSDN.

+1

Gracias enlace es muy ... Ruso. Menos mal que puedo leer "Россия (Pусский)". – felickz

+0

Para aquellos que no pueden leer en ruso ...;) https://msdn.microsoft.com/library/system.tuple.aspx – GazB

4

recomiendo esta solución

public class MyCustomClass 
    { 
     public string MyString1 { get; set; } 
     public string MyString2 { get; set; } 
     public string MyString3 { get; set; } 
    } 

    class MyApp 
    { 
     public MyApp() 
     { 
      List<MyCustomClass> customList = new List<MyCustomClass>(); 
      customList.Add(new MyCustomClass 
      { 
       MyString1 = "Hello", 
       MyString2 = "Every", 
       MyString3 = "Body", 
      }); 
     } 
    } 
0

alguien trataba dynamic?

var list = new List<dynamic>(); 
list.Add(new { Name = "SampleN", Address = "SampleA", Email = "SampleE" }); 

var name = list[0].Name; 
Cuestiones relacionadas