2009-08-01 10 views
7

tengo el siguiente elemento de la listaconseguir un artículo en una lista

public List<Configuration> Configurations 
{ 
    get; 
    set; 
} 

public class Configuration 
    { 
    public string Name 
    { 
     get; 
     set; 
    } 
    public string Value 
     { 
     get; 
     set; 
    } 
} 

¿Cómo puedo tirar de un elemento de configuración donde nombre = valor?

Por ejemplo: digamos que tengo 100 objetos de configuración en esa lista.

¿Cómo puedo obtener: Configurations.name [ "myConfig"]

Algo por el estilo?

ACTUALIZACIÓN: Solución para .NET favor v2

Respuesta

16

Utilizando el método List<T>.Find en C# 3.0:

var config = Configurations.Find(item => item.Name == "myConfig"); 

En C# 2.0/.NET 2.0 se puede usar algo como lo siguiente (sintaxis podía estar ligeramente desviado ya que no he escrito delegados de esta manera en un tiempo bastante largo ...):

Configuration config = Configurations.Find(
    delegate(Configuration item) { return item.Name == "myConfig"; }); 
+0

¿Funcionará en .net v2? –

+0

Gracias Greg, exactamente lo que quería saber, ¿está bien en memoria sabia, usar un delegado? –

+0

@JL - La respuesta original requiere C# 3.0/.NET3.5 pero he agregado una que funcionará con C# 2.0/.NET2.0 –

0

Trate List(T).Find (C# 3.0):

string value = Configurations.Find(config => config.Name == "myConfig").Value; 
2

considerar el uso de un diccionario, pero si no:


Usted pregunta no era totalmente claro para mí, uno de los dos debe ser su respuesta.

usando LINQ:

var selected = Configurations.Where(conf => conf.Name == "Value"); 

o

var selected = Configurations.Where(conf => conf.Name == conf.Value); 

si lo quieres en una lista:

List<Configuration> selected = Configurations 
    .Where(conf => conf.Name == "Value").ToList(); 

o

List<Configuration> selected = Configurations 
    .Where(conf => conf.Name == conf.Value).ToList(); 
5

Parece que lo que realmente quieres es un diccionario (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx).

Los diccionarios están diseñados específicamente para mapear pares clave-valor y le ofrecerán un rendimiento mucho mejor para las búsquedas de lo que lo haría una lista.

0

He aquí una manera que podría utilizar:

static void Main(string[] args) 
     { 
      Configuration c = new Configuration(); 
      Configuration d = new Configuration(); 
      Configuration e = new Configuration(); 

      d.Name = "Test"; 
      e.Name = "Test 23"; 

      c.Configurations = new List<Configuration>(); 

      c.Configurations.Add(d); 
      c.Configurations.Add(e); 

      Configuration t = c.Configurations.Find(g => g.Name == "Test"); 
     } 
+0

Error de sintaxis ... – EricSchaefer

Cuestiones relacionadas