Gibt es einen Unterschied zwischen myNullableLong.HasValue und myNullableLong != null?
Wenn ich einen nullable lange, zum Beispiel, gibt es einen Unterschied zwischen
myNullableLong.HasValue
und
myNullableLong != null
... oder ist es nur 'syntaktischer Zucker'?
- Finden Sie unter diesem ähnliche Frage
- Es geht um readbility nur.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nur syntaktischer Zucker. Sie Verhalten sich genau der gleichen Weise - die Nichtigkeit test eigentlich kompiliert wird, in einen Aufruf
HasValue
sowieso.Beispiel:
IL:
HasValue
wäre besser lesbar.!= null
als ichHasValue
Vergleiche.!= null
persönlich. Ich denke, es würde Sinn machen, aber basierend auf Jon ' s Antwort zu bevorzugenHasValue
wenn!= null
wird kompiliert, um einen Anruf zuHasValue
in jedem Fall aber Compiler sind schnell genug, richtig... es ist also im Grunde eine subjektive Wahl. Ich bleibe bei!= null
persönlich 🙂Es ist syntaktischer Zucker; die
Nullable<T>
ist eigentlich einstruct
, so kann es nicht eigentlich werdennull
; der compiler wandelt Anrufe zu vergleichen, umnull
(wie dein zweites Beispiel) in Aufrufe anHasValue
.Beachten Sie jedoch, dass Boxen eine
Nullable<T>
in eineobject
wird im Ergebnis entweder den WertT
(wenn es einen Wert hat) odernull
(wenn es nicht).I. E.
Nicht.
Den C# - compiler verfügt über eine integrierte Unterstützung für
Nullable<T>
ab und schaltet Gleichheit Operationen mitnull
in Aufrufe an die Struktur der Mitglieder.n != null
undn.HasValue
wird sowohl das kompilieren identisch IL.