2012-05-12 131 views
0

我有一個Customer對象的列表,我試圖在每個對象中搜索一個名稱。在Customer對象中有一個屬性ContactData,它返回一個Contact對象。而在Contact對象中,我有一個方法返回一個名字的字符串。正是我試圖與之比較的名稱,但它不能正常工作,因爲我每次都會受到攻擊,儘管我搜索的是任何Customer對象中不存在的名稱。我正在使用的代碼:在對象列表中搜索

foreach (Customer name in m_customers) 
{ 
     if (name.ContactData.FullName == "Anna") 
     { 
      MessageBox.Show(string.Format("Yes"), "Test!", MessageBoxButtons.OK, MessageBoxIcon.Information); // Just for testing 
     } 
} 

我也測試過使用簡單for循環,但是我得到了相同的結果。我不確定我做了正確的事情,並會提供一些幫助!謝謝!

+0

在foreach循環中插入一個簡單的'console.writeline'調用,以便爲循環中的每個項目打印ContactData.FullName。你的變量命名很混亂,你可能想'foreach(客戶客戶在m_customers中)' – ChristopheD

+0

你是否驗證了'm_customers'包含了一個唯一對象列表? – ChrisF

+0

你能解釋一下,ChrisF? –

回答

1

試試這個,它可能是在「全名」以某種方式被設置爲「安娜」爲所有的客戶在某處你的代碼,或在數據庫中,或存儲過程...

foreach (Customer name in m_customers) 
{ 
    if(name.ContactData != null) System.Diagnostics.Debug.WriteLine(name.ContactData.FullName); 

    if (name.ContactData.FullName == "Anna") 
    { 
     MessageBox.Show(string.Format("Yes"), "Test!", MessageBoxButtons.OK, MessageBoxIcon.Information); // Just for testing 
    } 
} 

如果是這種情況,請對關鍵字'Anna'進行全局搜索並查看彈出的內容。

另一種可能性是您沒有爲每個客戶創建新的ContactData對象,而只是重用了一個變量。這可能會更新與SAME Con​​tactData對象的所有客戶,因爲正在使用指針。相反,對於每個客戶,請改爲創建一個全新的ContactData對象。

如果這兩種可能性沒有幫助,則必須發佈更多代碼進行故障排除。

+0

我在代碼中的WriteLine下面出現一條紅線!儘管我正在使用System.Diagnostics;我還使用了一個消息框來顯示每個對象的名稱,它們都是不同的,正確的 –

+0

糟糕...對不起,我的不好。它的System.Diagnostics.Debug.WriteLine –

+0

所以..如果你採取相同的代碼並放入「John.Doe.Should.Not.Exist」,MessageBox會觸發? –