2012-06-15 48 views
6

我想學習如何在C#中使用列表。這裏有很多教程,但是沒有一個真正解釋如何查看包含記錄的列表。如何查看存儲在列表中的值?

這裏是我的代碼:

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

我想在一個消息顯示值。現在我只是確保信息進入清單。我也想學習如何在列表中找到一個值,並獲取與其相關的其他信息,例如,我想通過對象編號查找項目,如果它在列表中,則它將返回地址。我也使用WPF,如果這有所作爲。任何幫助將不勝感激。謝謝。

+4

你可以使用LINQ查詢,選中[這](http://stackoverflow.com/a/1175662/647884)。 – Bastardo

+0

如果ObjectNumber是唯一的,那麼你可能想用一個字典(而不是列表),用'TKey'作爲保存對象編號的字符串類型。 – Matthew

+0

我會用字典,但用戶必須能夠在「產品」被替換或更換時更新對象編號。 – JLott

回答

5

,最好的辦法是重寫ToString在你的類並使用string.Join加入所有的記錄:

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

以下是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; 
    } 
} 

我也想學習如何在列表中找到一個值並獲取與其相關的其他信息,例如,我想通過對象編號查找項目,如果它在列表中,那麼它將返回地址。

有幾種方法來搜索List<T>,這裏有兩個:

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

這工作完美!非常感謝。 – JLott

+0

@JLott:編輯我的答案以展示如何搜索列表。 –

+0

令人驚訝的是,只有幾行可以如此教導一個人。感謝您更新您的答案,這非常有幫助! – JLott

1

一旦你有了你的列表,你可以使用foreach循環遍歷它並以這種方式輸出值。

你也可以使用linq來查詢你的列表並返回你想要的值。

例如:

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

這將返回第一條記錄,其中ObjectNumber爲10

讓我知道,如果你需要進一步澄清。

2

要顯示列表中的項目,您可以迭代列表並從中獲取信息。

StringBuilder sb = new StringBuilder(); 

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

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

取決於你想要做什麼。

如果你想嘗試找一些數據,使用此代碼:

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

太棒了。我認爲這是我將嘗試爲了尋找價值。你能否解釋一下,我如何才能從中獲得ObjectAddress屬性?感謝您的幫助。 – JLott

+0

假設您的ObjectNumber是唯一ID,您可以執行以下操作: var objAddress =從屬性p中選擇 select p.ProductName其中p.ObjectNumber.Equals('YourVariable'); –

+0

如果你需要一個好的備忘單= http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b –

2

List<T>類實現IEnumerable<T>,它可以讓你用一大堆的非常有用的方法查詢列表。

我建議看看List<T>IEnumerable<T>的MSDN文檔。查看可用的方法並查看示例。如果您有任何具體問題,請回到SO。

這裏是你如何能做到什麼你問爲例:

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