2012-06-15 8 views
6

Sto cercando di imparare come usare le liste in C#. Ci sono molti tutorial là fuori, ma nessuno di loro spiega veramente come visualizzare un elenco che contiene un record.Come visualizzare i valori memorizzati in un elenco?

Ecco il mio codice:

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

voglio per visualizzare i valori in una messagebox. In questo momento mi sto solo assicurando che le informazioni entrino nella lista. Voglio anche imparare come trovare un valore nella lista e ottenere le altre informazioni ad esso correlate, come, voglio trovare l'oggetto dal Numero oggetto e se è nella lista, restituirà l'indirizzo . Sto anche usando WPF, se questo fa la differenza. Qualsiasi aiuto sarà apprezzato. Grazie.

+4

si potrebbe utilizzare una query LINQ, selezionare [questo] (http://stackoverflow.com/a/1175662/647884). – Bastardo

+0

se ObjectNumber è univoco, è possibile che si desideri rendere un dizionario (anziché un elenco) con 'TKey' come tipo di stringa per contenere il numero dell'oggetto. – Matthew

+0

Avrei usato un dizionario, ma l'utente dovrà essere in grado di aggiornare il numero dell'oggetto quando il "prodotto" viene sostituito o cambiato. – JLott

risposta

5

Il modo migliore è quello di ignorare ToString nella tua classe e utilizzare string.Join per unire tutti i record:

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

Ecco una possibile implementazione di 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; 
    } 
} 

Voglio anche imparare come trovare un valore nell'elenco e ottenere le altre informazioni ad esso correlate, ad esempio, voglio trovare l'oggetto dal Numero oggetto e se è presente nell'elenco, verrà restituire l'indirizzo.

Ci sono diversi modi per cercare un List<T>, qui sono due:

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

Questo ha funzionato perfettamente! Grazie mille. – JLott

+0

@JLott: Modificato la mia risposta per mostrare come cercare un elenco. –

+0

Incredibile come poche righe possano insegnare a una persona così tanto. Grazie per aver aggiornato la tua risposta, è stato molto utile! – JLott

1

Una volta ottenuto l'elenco, è possibile eseguirne il ciclo tramite un ciclo foreach e generare i valori in questo modo.

È anche possibile utilizzare linq per richiedere l'elenco e restituire i valori desiderati.

Ad esempio:

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

Questo sarebbe restituire il primo record in cui l'ObjectNumber era 10.

fatemi sapere se avete bisogno di maggiori chiarimenti.

2

Per visualizzare gli elementi in un elenco, è possibile scorrere l'elenco e ottenere le informazioni da esso.

StringBuilder sb = new StringBuilder(); 

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

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

Dipende da ciò che si desidera fare.

Se si vuole cercare di trovare alcuni dati, utilizzare questo codice:

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

Fantastico. Penso che questo sia quello che sto per provare per cercare i valori. Potresti spiegare come ottenere da questo la proprietà ObjectAddress. Grazie per l'aiuto. – JLott

+0

Supponendo che il tuo ObjectNumber sia l'ID univoco puoi fare qualcosa del tipo: var objAddress = da p in Proprietà seleziona p.ProductName dove p.ObjectNumber.Equals ('YourVariable'); –

+0

Se è necessario un buon cheat sheet = http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b –

2

List<T> classe implementa IEnumerable<T>, che consente di utilizzare tutta una serie di metodi molto utili per l'interrogazione della lista.

Si consiglia di dare un'occhiata alla documentazione MSDN di List<T> e IEnumerable<T>. Passare attraverso i metodi disponibili e vedere gli esempi. Se hai domande specifiche, torna su SO.

Ecco come si può realizzare quello che hai chiesto come esempio:

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