Benutzer mit den meisten Antworten
Prüfen einer Hashtable mit LINQ

Frage
-
Hallo,
ich will mit LINQ feststellen, on in der Hashtable mindestens ein Eintrag existiert, dessen value true ist.private void Form1_Load(object sender, EventArgs e)
{
Hashtable ht = new Hashtable();
ht.Add(1, false);
ht.Add(2, false);
bool result = ht.Values.Cast<DictionaryEntry>().Any(item => (bool)item.Value == true);}
result soll true oder false sein
Ich erhalte eine Fehlermeldung: InvalidCastException was unhandled, Specified cast is not valid
Fehlerquelle ist wohl (bool). Lasse ich das Casten weg, erhalte ich auch eine Fehlermeldung (object - bool).
Wo liegt der Fehler?
Alexander
Antworten
-
Warum castest du die values in ein DictioanryEntry, und nicht die Hashtable?
//bool result = ht.Values.Cast<DictionaryEntry>().Any(item => (bool)item.Value == true); bool result = ht.Cast<DictionaryEntry>().Any(item => (bool)item.Value == true);
- Als Antwort markiert AlexanderRi Donnerstag, 7. Juli 2011 14:32
Alle Antworten
-
Warum castest du die values in ein DictioanryEntry, und nicht die Hashtable?
//bool result = ht.Values.Cast<DictionaryEntry>().Any(item => (bool)item.Value == true); bool result = ht.Cast<DictionaryEntry>().Any(item => (bool)item.Value == true);
- Als Antwort markiert AlexanderRi Donnerstag, 7. Juli 2011 14:32
-
Hallo AlexanderRi,
zunächst mal die Frage, warum du eine Hashtable verwendest. Die Collections aus dem Namespace System.Collection gelten ja als veraltet wurden durch die Collections aus dem Namespace System.Collections.Generic abgelöst.
Folgender Code liefert das gewünschte Ergebnis:
Dictionary<int,bool> map = new Dictionary<int,bool>(); map.Add(1, false); map.Add(2, true); bool result = map.Values.Any(t => t); Console.WriteLine(result);
Solltest du aber, warum auch immer, weiterhin eine Hashtable verwenden, so funktioniert folgendes:
Hashtable ht = new Hashtable(); ht.Add(1, false); ht.Add(2, false); var result = ht.Values.Cast<object>().Any(t => (bool) t); Console.WriteLine(result.ToString());
In der ht.Values Auflistung befinden sich object Objekte. Es sind ja nur die Werte. Die Schlüssel hast du ja ausgeschlossen. Daher geht der Cast in ein DictionaryEntry in die Hose.
Ich hoffe ich konnte dir weiterhelfen. Solltest du noch Fragen haben...immer nur zu ;)
Viele Grüße
Holger M. Rößler
Kaum macht man es richtig, schon funktioniert es