Ich bevorzuge in den meisten Fällen Umwandlungen mit %code% , weil normalerweise ein falscher Typ des Objekts einen Fehler anzeigt. Bugs sollten Ausnahmen verursachen IMO - und ein %code% bei genau der Zeile, die den Cast durchführt, ist viel klarer als ein %code% viel später im Code.
%code% sollte verwendet werden, wenn es gültig und legal ist, dass ein Verweis auf ein Objekt des Typs übergeben wurde, den Sie nicht möchten. Diese Situation kommt auf, aber nicht so oft wie in meiner Erfahrung üblich.
Das Vergleichen von Typen mit %code% ist jedoch sehr selten die richtige Lösung - es ist nur dann sinnvoll, wenn Sie nach dem genauen Typ und nicht nach einem kompatiblen Typ suchen möchten.
Ich habe ein deutlich länger geschrieben antworten Sie über die Diskussion "Cast vs as" woanders.
Im Allgemeinen sind diese beiden Snippets nicht äquivalent. %code% liefert ein korrektes Ergebnis, auch wenn %code% ein Ur-Enkel von %code% ist, während %code% nur dann %code% ist, wenn %code% genau% co_de ist % und keine seiner möglichen Unterklassen.
"as": gutes Zeug. benutze es die ganze Zeit.
Wenn Sie wirklich eine Alternative zum manuellen Vergleichen von Typen wünschen, versuchen Sie:
%Vor%liest sich noch besser.
Ich finde das mit dem folgenden:
%Vor%ist einfacher zu schreiben und zu verstehen als:
%Vor%Gibt es zwingende Gründe, nicht das erste Konstrukt zu verwenden?
Ihr Beispiel wäre besser geschrieben als:
%Vor%Es ist genau diese doppelte Überprüfung, dass der %code% -Operator helfen kann zu vermeiden. Also für Ihr genanntes Beispiel würde ich sagen, dass es definitiv eine gute Lösung ist.
Es gibt jedoch Situationen, in denen Sie wirklich eine Besetzung wünschen. Wenn Sie %code% erwarten und nichts anderes möchten, sorgt das Casting dafür, dass %code% ausgelöst wird, wenn Sie etwas anderes erhalten.
Wie in den meisten Situationen gibt es hier keine allgemeine Regel: Verwenden Sie das richtige Werkzeug für den richtigen Job .
Überhaupt nicht - es gibt Ihnen die Möglichkeit zu überprüfen, dass die Konvertierung (Cast) OK war. Wenn du es tust
%Vor%Sie erhalten möglicherweise eine Ausnahme, wenn die Umwandlung fehlschlägt.
Wenn Sie einen einfachen (nicht nullbaren) Werttyp wünschen, funktioniert das natürlich nicht, zB:
%Vor%ist jedoch nicht gültig:
%Vor%ist erlaubt.
"as" ist schneller, aber zu beachten sind:
"as" gibt eine Null zurück, anstatt eine Ausnahme auszulösen, wenn das ein Problem ist
Es werden keine benutzerdefinierten Konvertierungen in
funktioniert nicht für Referenz- & gt; -Wert
Edit: "as" ist definitiv schneller ( Ссылка )
Edit2: also im Grunde eine Geschwindigkeit vs Sicherheit Entscheidung
Nein, ich benutze es ziemlich oft. Damit können Sie %code% s sauber vermeiden.
Zum Beispiel:
%Vor%im Gegensatz zu:
%Vor%Wenn ein falscher Typ ein Fehler ist, sollten Sie einen Cast verwenden. Der Grund dafür ist, dass es wirklich ein Problem gibt und Sie darüber Bescheid wissen sollten.
Wenn es möglich ist, dass der Wert Null ist und dies kein Fehler im System ist, dann benutze "as". Der Grund dafür ist, dass Sie "as" immer dann verwenden sollten, wenn ein Nullwert akzeptiert wird.
Beachten Sie, dass Sie "as" nicht verwenden können, um in Werttypen zu konvertieren, da der Nullwert für sie nicht akzeptabel ist. Wenn Sie einen Werttyp haben und "wie" verwenden möchten, müssen Sie einen Nullwerttyp verwenden.
zu verwenden ist