2012-06-15 14 views
6

Estoy tratando de aprender a usar listas en C#. Hay muchos tutoriales, pero ninguno explica cómo ver una lista que contiene un registro.¿Cómo ver los valores almacenados en una lista?

Aquí está mi código:

class ObjectProperties 
{ 
    public string ObjectNumber { get; set; } 
    public string ObjectComments { get; set; } 
    public string ObjectAddress { get; set; } 
} 

List<ObjectProperties> Properties = new List<ObjectProperties>(); 
ObjectProperties record = new ObjectProperties 
    { 
     ObjectNumber = txtObjectNumber.Text, 
     ObjectComments = txtComments.Text, 
     ObjectAddress = addressCombined, 
    }; 
Properties.Add(record); 

Quiero mostrar los valores en un cuadro de mensaje. En este momento solo me estoy asegurando de que la información vaya a la lista. También quiero aprender cómo encontrar un valor en la lista y obtener la otra información relacionada con ella, como por ejemplo, quiero encontrar el artículo por el Número de Objeto y, si está en la lista, devolverá la dirección. . También estoy usando WPF, si eso hace la diferencia. Cualquier ayuda será apreciada. Gracias.

+4

se puede utilizar una consulta LINQ, comprobar [esto] (http://stackoverflow.com/a/1175662/647884). – Bastardo

+0

si ObjectNumber es único, entonces es posible que desee convertirlo en un diccionario (en lugar de una lista) con el 'TKey' como el tipo de cadena para contener el número de objeto. – Matthew

+0

Hubiera usado un diccionario, pero el usuario tendrá que poder actualizar el Número de Objeto cuando el "producto" sea reemplazado o cambiado. – JLott

Respuesta

5

La mejor manera es para anular ToString en su clase y utilizar string.Join a unirse a todos sus registros:

var recordsAsString = string.Join(Environment.NewLine, 
      Properties.Select(p => p.ToString())); 
MessagBox.Show(recordsAsString); 

He aquí una posible implementación de ToString:

class ObjectProperties 
{ 
    public string ObjectNumber { get; set; } 
    public string ObjectComments { get; set; } 
    public string ObjectAddress { get; set; } 

    public override string ToString() 
    { 
     return "ObjectNumber: " 
       + ObjectNumber 
       + " ObjectComments: " 
       + ObjectComments 
       + " ObjectAddress: " 
       + ObjectAddress; 
    } 
} 

También quiero aprender cómo encontrar un valor en la lista y obtener la otra información que está relacionada con ella, como, quiero encontrar el elemento por el número de objeto y si está en la lista, entonces lo hará devuelve la dirección

Hay varias formas de buscar un List<T>, aquí son dos:

String numberToFind = "1234"; 
String addressToFind = null; 
// using List<T>.Find method 
ObjectProperties obj = Properties.Find(p => p.ObjectNumber == numberToFind); 
//using Enumerable.FirstOrDefault method (add using System.Linq) 
obj = Properties.FirstOrDefault(p => p.ObjectNumber == numberToFind); 
if (obj != null) 
    addressToFind = obj.ObjectAddress; 
+0

¡Esto funcionó perfectamente! Muchas gracias. – JLott

+0

@JLott: Edité mi respuesta para mostrar cómo buscar una lista. –

+0

Es sorprendente cómo unas pocas líneas pueden enseñarle tanto a una persona. Gracias por actualizar su respuesta, ¡fue muy útil! – JLott

1

Una vez que tenga su lista, puede recorrerla mediante un bucle foreach y generar los valores de esa manera.

También puede usar linq para consultar su lista y devolver los valores que desea.

Por ejemplo:

properties.Where(x=>x.ObjectNumber == 10).FirstOrDefault() 

Esto volvería el primer registro en el que el Número de inmueble era 10.

Avísame si necesita más aclaraciones.

2

Para mostrar los elementos en una lista, puede recorrer la lista y obtener la información de ella.

StringBuilder sb = new StringBuilder(); 

foreach (ObjectProperties op in Properties) 
{ 
    sb.Append(op.ObjectNumber + "\n"); 
} 

sb.ToString(); // show this in messagebox 
2

Depende de lo que quieras hacer.

Si desea tratar de encontrar algunos datos, utilice este código:

List<ObjectProperties> Properties = new List<ObjectProperties>(); 
var result = Properties.Where(n => n.ObjectNumber.Equals('yourVariableHere')); 
+0

Impresionante. Creo que esto es lo que voy a intentar para buscar los valores. ¿Podría explicar cómo podría obtener solo la propiedad ObjectAddress a partir de esto? Gracias por tu ayuda. – JLott

+0

Suponiendo que su ObjectNumber es el ID exclusivo, podría hacer algo como lo siguiente: var objAddress = from p en Properties select p.ProductName donde p.ObjectNumber.Equals ('YourVariable'); –

+0

Si necesita una buena hoja de trucos = http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b –

2

List<T> clase implementa IEnumerable<T>, lo que le permite utilizar un montón de métodos muy útiles para la consulta de la lista.

Recomiendo echar un vistazo a la documentación de MSDN de List<T> y IEnumerable<T>. Repase los métodos disponibles y vea los ejemplos. Si tiene alguna pregunta específica, vuelva a SO.

Así es como se puede lograr lo que pidió como un ejemplo:

string address = myList 
       .Where(x=>x.ObjectNumber=="A123") 
       .Select(x=>x.ObjectAddress) 
       .First(); 
Cuestiones relacionadas