2012-05-12 72 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会触发? –