2012-05-12 9 views
0

私は顧客オブジェクトのリストを持っていますが、私は各オブジェクトの名前を検索しようとしています。 Customerオブジェクトには、Contactオブジェクトを返すプロパティContactDataがあります。 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ループを使用してテストしましたが、同じ結果が得られます。私は正しいことをしていると確信していないといくつかの助けをpreciateだろう!ありがとう!

+0

foreachループに単純な 'console.writeline'呼び出しを挿入して、ループ内のすべての項目のContactData.FullNameを出力します。あなたの変数の命名は混乱します。おそらく 'foreach(m_customersの顧客) ' – ChristopheD

+0

' m_customers'に一意のオブジェクトのリストが含まれていることを確認しましたか? – ChrisF

+0

あなたはそれを説明できますか、クリス? –

答えて

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」をグローバルに検索し、何がポップアップしているかを確認してください。

もう1つの可能性は、顧客ごとに新しいContactDataオブジェクトを作成せず、単に変数を再利用することです。これは、ポインタが使用されているため、Same ContactDataオブジェクトを持つすべてのCustomersを更新している可能性があります。代わりに、各顧客ではなく、まったく新しいContactDataオブジェクトを作成します。

これらの2つの可能性が役立たない場合は、トラブルシューティングのためにコードを投稿する必要があります。

+0

コード内のWriteLineの下に赤い線が表示されます。私はSystem.Diagnosticsを使用していますが、私はまた、メッセージボックスを使って各オブジェクトの名前を表示しました。それらはすべて異なっていて正確です。 –

+0

おっと...申し訳ありませんが、私の悪い。それはSystem.Diagnostics.Debug.WriteLineです。 –

+0

同じコードを使用して "John.Doe.Should.Not.Exist"をドロップすると、MessageBoxが起動しますか? –