myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Sollte beim expliziten casten hier keine Exception fliegen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

geschlossen (weitere Infos)
Zum Ende der Seite springen  

Sollte beim expliziten casten hier keine Exception fliegen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 239
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Sollte beim expliziten casten hier keine Exception fliegen?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Ihr Lieben!

Ich bräuchte mal wieder eure Hilfe... Bin gerade etwas ratlos.

Zum Hintergrund:
Ich arbeite gerade mit EF CodeFirst an einem Remake einer (eigentlich) bereits
erledigten Arbeit, die ich komplett neu aufsetze.

Folgender Code stammt aus einem generischen Repository, welches mit dem EF-CodeFirst-Context interagiert:

C#-Code:
public T Delete(EasySoftenerContext db, T entity)
{
    TSql sqlEntity = (TSql)GetById(db, GetKey(entity));
    GetDbSet(db).Remove(sqlEntity);
    return sqlEntity;
}

Bei Zeile 2 der Methode (GetDbSet(db).Remove(sqlEntity);) fliegt eine

Fehlermeldung:
ArgumentNullException

- Parameter: entity.

Vorab: entity ist laut Debugger nicht null und implementiert den Typ TSql.
Vorher hatte ich das mit einem "as TSql" gemacht - hatte es dann zwecks Debugging mit einem expliziten Cast in Zeile 1 versucht. - Nun - Ich würde normalerweise erwarten, dass wenn überhaupt eine Exception fliegt - diese doch in Zeile 1 fliegen müsste - oder sehe ich das jetzt falsch?

Ich würde mich über jede Hilfestellung zu diesem Fehler melden - ich fühl mich grad ungeschickt und verstehe nicht wie es dazu kommen kann, da bei einem fehlgeschlagenen, expliziten Cast normalerweise eine Exception fliegt - hier ist nach dem Cast allerdings "sqlEntity" einfach NULL, obwohl es das garnicht geben dürfte.

Vielen Dank im Voraus.

LG
Achim
26.04.2012 21:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
inflames2k inflames2k ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3407.gif


Dabei seit: 03.01.2010
Beiträge: 1.523
Entwicklungsumgebung: Visual Studio 2005 Standard
Herkunft: Riesa


inflames2k ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das die Exception erst in der 2. Zeile der Methode geworfen wird ist völlig korrekt.

Schlägt der Cast auf den Typen fehl, wird die Zielvariable mit Null belegt. - Eine Prüfung auf NULL muss hier somit zwingend erfolgen.


mycsharp.de  Moderationshinweis von herbivore (27.04.2012 08:42):

Die Aussage stimmt nicht, siehe weiter unten.
 
26.04.2012 21:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 239
Entwicklungsumgebung: VS 2010
Herkunft: Mainz

Themenstarter Thema begonnen von Taipi88

Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo und vielen Dank !

Dann habe ich an den falschen Stellen gesucht...

Danke für die Aufklärung :-)

LG
Achim

PS: Sry - war mir 100% sicher, dass da ein Fehler fliegen sollte..
26.04.2012 22:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Sarc
myCSharp.de-Mitglied

Dabei seit: 29.09.2008
Beiträge: 287
Entwicklungsumgebung: VS 2012


Sarc ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von inflames2k:
Schlägt der Cast auf den Typen fehl, wird die Zielvariable mit Null belegt.

Das stimmt nicht. Das wäre nur der Fall wenn du mit as arbeiten würdest.
Hier ist es einfach so, dass der zurückgegebene Wert wohl null ist. Vergleiche:

C#-Code:
object o = null;
string s = (string)o;
// Zugriffe auf s resultieren in einer NullPointerException
o = true;
s = o as string; // geht
s = (string)o; // geht nicht
26.04.2012 22:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
FZelle
myCSharp.de-Poweruser/ Experte

Dabei seit: 23.04.2004
Beiträge: 8.478


FZelle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Man sollte die Fehlermeldung auch richtig lesen.

Die besagt nämlich das der Parameter der der Funktion übergeben wurde null war, also das sqlEntity == null ist.
27.04.2012 11:12 Beiträge des Benutzers | zu Buddylist hinzufügen
mabo
myCSharp.de-Mitglied

Dabei seit: 16.05.2007
Beiträge: 287
Entwicklungsumgebung: VS 2010 Prof. , Eclipse


mabo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

An dieser Stelle kann der Artikel nicht schaden. großes Grinsen  [Tipp] Casten aber richtig: () / is / as
27.04.2012 15:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
myCSharp.de
Moderationshinweis von herbivore (27.04.2012 19:18):

Schon in der zweiten Antwort stand, dass der Rückgabewert null ist. Spätestens ab da war der Fall doch klar. Weiteres Rumspekulieren war und ist unnötig.

Casten gehört sowieso zu den Grundlagen, siehe  [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

 
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
geschlossen (weitere Infos)


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 19.05.2013 12:04