Laden...

Verständnissproblem ????

Erstellt von IhateWin vor 19 Jahren Letzter Beitrag vor 19 Jahren 1.761 Views
I
IhateWin Themenstarter:in
79 Beiträge seit 2004
vor 19 Jahren
Verständnissproblem ????

ich hab ein Hashtable (HT) dessen Value´s DataView´s sind...

wenn ich mit

MessageBox.Show(HT[this.listView.FocusedItem.Text].ToString());

zeigt er mir auch an das es DataView´s sind ...

wenn ich aber folgendes probiere

foreach(DataRowView zeile in HT[this.listView.FocusedItem.Text])
{
}

kommt eine fm: " das object hat keine definition für GetEnumerator"!

setze ich dann ein (DataView) ein funtzt es, wieso ????

foreach(DataRowView zeile in (DataView)HT[this.listView.FocusedItem.Text])
{
}

257 Beiträge seit 2004
vor 19 Jahren

Hi,

ich schätze das du die Fehlermeldung bekommst weil in der Hashtable Objekte
vom Typ object gespeichert sind. Du musst das Objekt in deinem Fall erst wieder
in ein DataView umwandeln damit auch alle Eigenschaften und Methoden zur
Verfügung stehen.

Viele Grüße

Roland

333 Beiträge seit 2004
vor 19 Jahren

C# ist eben komplett typsicher. object definiert nicht die Schnittstelle IEnumerable, die für das Durchlaufen von foreach notwendig ist. Ein typunabhängiges foreach könnte so aussehen:

object element = HT[this.listView.FocusedItem.Text];
if (element is IEnumerable)
{
	foreach (object obj in (IEnumerable) element)
	{
		Console.WriteLine(obj);
	}
}

([bb]|[^b]{2})

I
IhateWin Themenstarter:in
79 Beiträge seit 2004
vor 19 Jahren
???

aber wieso weiß die ToString-Methode das es ein DataView ist ....

257 Beiträge seit 2004
vor 19 Jahren

Weil die ToString() Methode virtual von object vererbt wird und in den einzelnen Klassen mit override überschrieben wird. Deshalb wird bei einer Variablen die vom Typ object ist und eine DataView die als object gecastet wurde beeinhaltet die Methode ToString() von DataView und nicht von object aufgerufen.