2015-05-26 29 views
6

我看到很多類似的問題,但沒有直接答案。我有一個List<ClientEntry>。我想訪問ClientEntry中的屬性。我的代碼如下所示:訪問列表中的類的屬性<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; 
      } 
     } 
    } 
} 

後來:

private List<ClientEntry> clientList; 

我再添加了一堆ClientEntry年代到列表中。

如何訪問clientList中的項目的ClientName和ClientEmail屬性?另外,如何檢查List中是否存在某個ClientName或ClientEmail屬性?這甚至有可能與對象的列表?我知道一個字典可能會更好,但我想看看是否可以用List和帶有屬性的類來完成。

+0

覆蓋'ClientEntry'中的'Equals'和'GetHashCode',並使用Contains,IndexOf,Remove和indexer訪問列表項。 – adatapost

+0

你能提供一個這樣的覆蓋的簡短例子,我會接受它作爲答案? – shenk

回答

6

你可以使用Linq查找列表中的值使用Any()

例如,

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

來訪問值,可以使用索引訪問,如果你知道的話,循環回收,或使用Where()搜索它:

var email = clientList[index].ClientEmail 

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

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

Where()方法中的< >是什麼意思? – shenk

+0

如果您的意思是'',我將其用作數據的佔位符。 – Steve

+0

啊好吧,只要確保沒有特別的語法:) – shenk

4

要訪問項目的具體列表,你輸入索引/使用的foreach

string name = clientList[index].ClientName; 

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

要檢查屬性的一定值時,使用LINQ的存在

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

你c一個探索你的列表如下

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

找到一個特定的記錄,你可以搜索它作爲

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

使用Extension Methods

就像這樣,你可以很容易地寫擴展類的單元測試,也很容易閱讀。

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)