jokey2
Erfahrenes Mitglied
Hallo Gemeinde!
Ich versuche mich gerade an C# und bin da auf ein Problem gestoßen:
Ich habe eine Klasse erstellt, die 3 string-Datenmember enthält. Elemente dieses Klassentyps speichere ich in einer ArrayList. In der Klasse habe ich die Equals-Methode überschrieben:
Nun möchte ich ein Element in der ArrayList finden, indem ich die Methode IndexOf() verwende. Laut MSDN verwendet diese Methode die Equals-Methode zum Vergleich.
Leider wird meine überladene Equals-Methode nicht aufgerufen und das entsprechende Objekt nicht gefunden.
Kann mir jemand sagen, was ich da falsch mache?
Die zu suchenden Elemente sind in der Liste vorhanden. Die Equals-Methode wird nicht aufgerufen.
Für sachkundige Hilfe bin ich wie immer dankbar!
[VS.NET 2003; C#]
Ich versuche mich gerade an C# und bin da auf ein Problem gestoßen:
Ich habe eine Klasse erstellt, die 3 string-Datenmember enthält. Elemente dieses Klassentyps speichere ich in einer ArrayList. In der Klasse habe ich die Equals-Methode überschrieben:
Code:
public override bool Equals(object obj)
{
return
(
(obj == this) ||
(
(obj.GetType() == this.GetType()) &&
(m_strName.Equals((obj as CSyncOrder).Name))
) ||
(
(obj.GetType() == typeof(string)) &&
(m_strName.Equals(obj as string))
)
);
}
Leider wird meine überladene Equals-Methode nicht aufgerufen und das entsprechende Objekt nicht gefunden.
Kann mir jemand sagen, was ich da falsch mache?
Code:
private ArrayList m_SyncOrders = new ArrayList();
...
private void listViewSyncOrders_ItemCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e)
{
int iItemIndex = e.Index;
ListViewItem itemSO = listViewSyncOrders.Items[iItemIndex];
string strName = itemSO.SubItems[0].Text;
int iArrayIndex = m_SyncOrders.IndexOf(strName); //<-- Hier wird nichts gefunden
if(iArrayIndex < 0)
return;
CSyncOrder ClickedSyncOrder = (CSyncOrder)m_SyncOrders[iArrayIndex];
ClickedSyncOrder.Active = System.Convert.ToBoolean(e.NewValue);
}
Für sachkundige Hilfe bin ich wie immer dankbar!
[VS.NET 2003; C#]