Laden...

ArgumentNullException bei Methodenaufruf

Erstellt von maik vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.360 Views
M
maik Themenstarter:in
170 Beiträge seit 2005
vor 17 Jahren
ArgumentNullException bei Methodenaufruf

hi zusammen,
ich habe ein kleines problem mit dem VS2005 in verbindung mit .NET 2.0...

und zwar gibt es eine assembly welche folgende methode zur verfügung stellt:


public static void Test(Hashtable paramList)
{
  if (null == paramList || paramList.Count == 0)
    throw new ArgumentNullException("paramList", "Liste leer/null!");
}

der aufruf wird aus meiner anwendung wie folgt gemacht:


Hashtable test = new Hashtable();
test.Add("bla","blub");

MyAssembly.Test(test);

witzig ist, dass trotzdem die ArgumentNullException geworfen wird! 🙂
wenn ich den kompletten ausdruck "null == paramList || paramList.Count == 0" mir in den Watcher ziehe, bekomme ich als ergebnis "false"! echt sehr seltsam, ist aber so... ist das ein BUG?

viel wichtiger ist aber noch: "kann ich dieses problem umgehen/fixen?"
danke!

gruß
maik

B
1.529 Beiträge seit 2006
vor 17 Jahren

Genau aus dem Grund setze ich jede einzelne Bedingung in Klammern.
Also:

 if ((paramList == null) || (paramList.Count == 0))

Dann kann nichts schief gehen...

N
750 Beiträge seit 2004
vor 17 Jahren

hallo,

normalerweise mache ich das so wie Borg.

habe aber den Code von maik kopiert und ausgeführt.
Läuft ohne Probleme bei mir. es kommt keine exception.....
bin also auch etwas ratlos, warum das bei dir nicht funktioniert!

nils

?( wer suchet, der findet auch! :]

M
maik Themenstarter:in
170 Beiträge seit 2005
vor 17 Jahren

mir geht es genauso mit der ratlosigkeit...
@Borg: der kompiler setzt die klammersetzung um, ist also nicht zwingende angabe im code, dennoch eigentlich korrekter. richtig.

so sieht der obige code aus, wenn ich die assembly disassemble:


Init_3b5efa624621c5db207dbdbf320af9a1.Register();
Init_3b5efa624621c5db207dbdbf320af9a1.m_vscov[10][0x252] = 1;
Init_3b5efa624621c5db207dbdbf320af9a1.m_vscov[10][0x256] = 1;
if ((paramList == null) || (paramList.Count == 0))
{
    Init_3b5efa624621c5db207dbdbf320af9a1.m_vscov[10][0x257] = 1;
    Init_3b5efa624621c5db207dbdbf320af9a1.m_vscov[10][600] = 1;
    Init_3b5efa624621c5db207dbdbf320af9a1.m_vscov[10][0x259] = 1;
    throw new ArgumentNullException("paramList", "Liste leer/null!");
}

eigentliches problem ist, dass die assembly nicht von mir sondern jemand anderem kommt, d.h. ich binde diese assembly nur ein und verwende sie.
eventuell sollte ich die assembly einfach erneut kompilieren und dann verwenden.

p.s.: ich habe aber auch kein service pack oder irgendwelche hotfixes für das VS2005. könnte es daran liegen?

gruß
maik