2015-05-26 13 views
6

Vedo molte domande simili ma nessuna con una risposta diretta. Ho un List<ClientEntry>. Voglio accedere alle proprietà in ClientEntry. Il mio codice è simile al seguente:Accesso alla proprietà di classe nell'elenco <Class>

class ClientEntry 
{ 
    private string _clientName; 
    private string _clientEmail; 

    public void ClientEntry(string name, string email) 
    { 
     this._clientName = name; 
     this._clientEmail = email; 
    } 

    public string ClientName 
    { 
     get 
     { 
      return _clientName; 

     } 
     set 
     { 
      _clientName = value; 
     } 
    } 

    public string ClientEmail 
    { 
     get 
     { 
      return _clientEmail; 
     } 
     set 
     { 
      RegexUtilities Validator = new RegexUtilities(); 
      if (Validator.IsValidEmail(value)) 
      { 
       _clientEmail = value; 
      } 
     } 
    } 
} 

tardi:

private List<ClientEntry> clientList; 

ho quindi aggiungere un po 'di ClientEntry di alla lista.

Come accedere alle proprietà ClientName e ClientEmail per gli elementi in elenco clienti? Inoltre, come posso verificare l'esistenza di una certa proprietà ClientName o ClientEmail all'interno dell'elenco? Questo è possibile anche con un elenco di oggetti? So che un dict probabilmente servirebbe meglio, ma volevo vedere se questo poteva essere fatto con una List e una classe con proprietà.

+0

Sovrascrivere 'Equals' e' GetHashCode' in 'ClientEntry' e utilizzare Contains, IndexOf, Remove e indexer per accedere agli elementi dell'elenco. – adatapost

+0

Potresti fornire un breve esempio di tali sovrascritture e lo accetterò come risposta? – shenk

risposta

6

Puoi utilizzare Linq per cercare valori all'interno di un elenco utilizzando Any()

Es.

bool emailExists = clientList.Any(x=>x.ClientEmail == <email>); 

Per valori di accesso, è possibile utilizzare una funzione di accesso indice se lo conosci, ciclo di raccolta, o utilizzare Where() per esplorarlo:

var email = clientList[index].ClientEmail 

o

foreach (var client in clientList) 
{ 
    var email = client.ClientEmail 
} 

o

var email = clientList.Where(x=>x.ClientName == <clientName>).FirstOrDefault(); 
+0

Cosa significa "< >" nel metodo Where()? – shenk

+0

Se intendi '' Lo sto usando come segnaposto per i tuoi dati. – Steve

+0

Ah ok, assicurandomi che non ci fosse una sintassi speciale :) – shenk

4

Per accedere a uno specifico di elemento nella lista, si immette l'indice/usando foreach

string name = clientList[index].ClientName; 

foreach(var client in clientList) 
{ 
    name = client.ClientName; // access the item one by one 
} 

Per verificare l'esistenza di certo valore di una proprietà, utilizzare LINQ

bool isExist = clientList.Any(i => i.ClientName == "John"); 
4

si c un esplorare la vostra lista come di seguito

foreach (ClientEntry client in clientList) 
    { 
    //client.ClientName 
    //client.ClientEmail 
    } 

per trovare un record particolare è possibile cercare come

clientList.Where(p=> p.ClientEmail == "[email protected]").FirstOrDefault(); 
2

Usa Extension Methods!

Qualcosa di simile, è possibile scrivere unit test contro la classe di estensione facilmente ed è anche semplice da leggere.

public static class ClientEntriesExtension 
{ 
    public static bool ExistEmail(this IEnumerable<ClientEntry> entries, string targetEmail) 
    { 
     return entries.Any(x=>x.ClientEmail == targetEmail); 
    } 
} 

bool exist = clientList.ExistEmail(targetEmail) 
Problemi correlati