Problem s Dictionary – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problem s Dictionary – .NET – Fórum – Programujte.comProblem s Dictionary – .NET – Fórum – Programujte.com

 

jirkab0
Newbie
20. 6. 2012   #1
-
0
-

zdravim,

Vytvarim aplikaci pro WP a narazil jsem na problem s Dictionary

mam Dictionary

Dictionary<Mena, double> DictionaryCurrencyCourse;

,kde Mena je slozena z Typu, a nazvu meny, typ je urcen enumem, takze konstruktor objektu Mena vypada nasledovne

Mena mena = new Mena(typ.CZK, "ceska koruna");

a pak v Designu mam ListPicker ze ktereho vybiram jednotlivou menu a chci zjistit kurz teto meny. Kdyz chci vyhledat vybranou menu tak mi to pise ze nebyl klic nalezen,

kod je nasledujici

MessageBox.Show(usedCurrency.GetType().ToString());
MessageBox.Show(usedCurrency.TypeOfCurrency.ToString());
MessageBox.Show(usedCurrency.NameOfCurrency.ToString());

foreach (var item in courses.DictionaryCurrencyCourse.Keys)
{
   MessageBox.Show(item.GetType().ToString());
   MessageBox.Show(item.TypeOfCurrency.ToString());
   MessageBox.Show(item.NameOfCurrency.ToString());
}

prvni tri vypisy mi vypisou typ objektu, typ meny, nazev meny kterou jsem vybral v listpickeru

a kdyz pote projdu kolekci klicu toho slovniku  tak v ni naleznu klic ktery ma stejny typ, typ meny i nazev, ale 

nasledujici kod mi vypise False

 MessageBox.Show(courses.DictionaryCurrencyCourse.ContainsKey(usedCurrency).ToString());
           

Dokazal by mi nekdo poradit, kde delam chybu? dekuji

Nahlásit jako SPAM
IP: 89.190.52.–
certeon0
Newbie
20. 6. 2012   #2
-
0
-

#1 jirkab

Napadá mě... Ověřil jsi, zda není DictionaryCurrencyCourse prázdný?

Podívej se v Debugu, zda v danou chvíli, kdy na něm voláš ContainsKey() obsahuje všechny položky, které má.

Pokud ne, tak krokuj zpátky a hledej místo, kde o data přišel.

Pokud ano, tak je možné, že metoda ContainsKey() pro zjištění přítomnosti daného klíče porovnává referenci na objekt a ne identičnost objektu ve slovníku s objektem předaným v metodě.

Pak by řešení bylo v implementaci interface IEquatable.

Nahlásit jako SPAM
IP: 109.71.213.–
certeon0
Newbie
20. 6. 2012   #3
-
0
-

#1 jirkab
Pokud však příkaz MessageBox.Show(courses.DictionaryCurrencyCourse.ContainsKey(usedCurrency).ToString());

měl sloužit pouze pro vypsání proměnné pro kontrolu, jako třeba v PHP, tak je to spíše nesprávné užití metody.

Ověřil jsem si to a můžu potvrdit, že metoda ContainsKey() skutečně používá pro porovnání klíčů porovnání jejich referencí. Buď implementuj IEquatable v třídě Mena, nebo použij hodnotovou proměnnou jako klíč slovníku.

Nahlásit jako SPAM
IP: 109.71.213.–
jirkab0
Newbie
20. 6. 2012   #4
-
0
-

#3 certeon
diky za rady, ale uz jsem na to prisel, musel jsem prepsat metodu equals aby se porovnavaly spravne klice, ktery jsou vlastniho typu

Nahlásit jako SPAM
IP: 109.80.144.–
certeon0
Newbie
20. 6. 2012   #5
-
0
-
Nahlásit jako SPAM
IP: 109.71.213.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 60 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý