Verwenden von auf null festlegbaren Typen in C#
Ich bin nur daran interessiert, die Meinung der Menschen. Beim verwenden von auf null festlegbaren Typen in C# was ist die beste Praxis Weg, um auf null zu testen:
bool isNull = (i == null);
oder
bool isNull = !i.HasValue;
Auch bei der Zuordnung zu einem nicht-null-Typ ist:
long? i = 1;
long j = (long)i;
besser als:
long? i = 1;
long j = i.Value;
InformationsquelleAutor Martin Brown | 2008-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die Formulare, die speziell realisiert für Sie das C# - team. Wenn jemand Objekte, sagen Sie Ihnen, Anders gesagt, es war okay.
Was ich sage, leichthin, ist, dass eine Menge Arbeit in die Integration von auf null festlegbaren Typen in c#, um Ihnen eine gute Programmierkenntnisse.
Beachten Sie, dass in Bezug auf Leistung, beide Formen kompilieren bis hin zu den gleichen IL, ie:
Endet, wie nach der C# - compiler hat es:
InformationsquelleAutor mackenir
Ich würde dieses:
Das bedeutet, dass, wenn ich ist null, als 0 zugewiesen werden.
Das problem, dass ich mit trhat form ist, dass nicht alle Entwickler wissen, was Los ist sofort.
Sehr cool - hatte ich nicht entdeckt????? operator oder den "Standard" noch.
Swangren, Professionelle .net Programmierer sollte erwartet werden, zu wissen, was den null-coalescing operator ist. Genauso wie ich erwarten würde, dass C-Entwickler wissen, das bit-shifting-Operatoren. Nicht code zu den niedrigsten commond Nenner der Programmierer, die noch nicht gelernt haben, etwas.
Durch die Konvertierung von null auf 0 Sie sind in der Tat versteckt sich eine Ausnahme. Dies kann angemessen sein, es hängt davon ab, ob man davon ausgehen kann, einen default-Wert. Auch, ob Sie sollten????? Betreiber war nicht wirklich Teil meiner Frage.
InformationsquelleAutor Seiti
Ich würde immer die (i==null) form. Es drückt aus, was Sie tun.
WRT die zweite Frage, ich denke, entweder form ist in Ordnung. Aber ich würde immer prüfen, es gegen die erste null und die entsprechenden Maßnahmen ergreifen - vielleicht wickeln Sie, dass der check und action bis in eine helper-Methode (oft, es setzt lediglich einen Standard-Wert).
InformationsquelleAutor philsquared
Habe ich noch nicht verwendet, auf null festlegbaren Typen in der Praxis, aber für das zweite, ich würde eigentlich vorschlagen, mit j.GetValueOrDefault(). Die Dokumentation legt nahe, dass letzteres wäre eigentlich wirft eine InvalidOperationException im Falle eines null-Wertes. Abhängig von der internen Implementierung der explizite cast-operator für lange?, die ehemaligen könnten, zu. Würd ich mich mit GetValueOrDefault und Behandlung der null/default-Fall angemessen.
InformationsquelleAutor Marc Bollinger
Ich Neige dazu zu verwenden, die zunächst auf beide, weil, wie es unterstützt werden muss später in seinen Lebens-Zyklus, diese scheinen leichter zu verstehen, was die Absicht der ursprünglichen Verfasser.
InformationsquelleAutor Fry
Eröffnet Reflektor. HasValue ist ein lookup auf ein Boolesches flag, das gesetzt wird, wenn der Wert geändert wird. Also im Sinne von Zyklen eine Suche wird dann schneller vergleichen.
InformationsquelleAutor AdamSane
Sind Sie beide die gleiche, aber ich würde die Verwendung der alten version auf die beiden, da es häufiger in der Sprache: Vergleich auf null und der Umwandlung in eine Typ.
InformationsquelleAutor Omer van Kloeten
Ich in der Regel dazu neigen, lehnen in Richtung der ersten option in beiden Szenarien, da es mehr "primitiven" orientiert sich im Gegensatz zu Objekt-orientiert (das war wirklich das, was wir wollten), aber es ist wirklich egal, dass viel
InformationsquelleAutor John