Was ist in C # der Standardwert einer Klasseninstanzvariablen vom Typ int?
?
Welchen Wert MyNullableInt
hat beispielsweise im folgenden Code, wenn er niemals explizit zugewiesen wird?
class MyClass
{
public int? MyNullableInt;
}
(Es scheint wahrscheinlich, dass die Antwort mit ziemlicher Sicherheit entweder null
oder ist 0
, aber welche davon ist es?)
int? x;
und sehen, was das Ergebnis ist.Antworten:
Der Standardwert für
int?
- und für jeden nullbaren Typ, der den "Typ?" Erklärung - istnull
.Warum dies der Fall ist:
int?
ist syntaktischer Zucker für den Typ Nullable <T> (wobei T istint
), eine Struktur. ( Referenz )Nullable<T>
Typ hat ein booles HasValue- Mitglied,false
wodurch dieNullable<T>
Instanz bei einemnull
Wert "wie" wirkt . Insbesondere wird die Methode Nullable <T> .Equals überschrieben, um zurückzugeben,true
wenn einNullable<T>
withHasValue == false
mit einem tatsächlichennull
Wert verglichen wird.null
.bool
Variablen in C # istfalse
( Referenz ). Daher ist dieHasValue
Eigenschaft eines StandardNullable<T>
ist Instanzfalse
; was wiederum dazu führt, dass sich dieseNullable<T>
Instanz selbst so verhältnull
.quelle
int? x = null;
nach ändereint? x;
, werden weiter unten im Code Compilerfehler angezeigt: "Verwendung der nicht zugewiesenen lokalen Variablen x".Field 'id' is never assigned to, and will always have its default value 0
. Seltsam, nicht wahr?Ich fand es wichtig, die
Nullable<T>.GetValueOrDefault()
Methode zu teilen , die besonders praktisch ist, wenn ich mit mathematischen Berechnungen arbeite, dieNullable<int>
aliasint?
Werte verwenden. Es gibt viele Fälle, in denen Sie dieHasValue
Eigenschaft nicht überprüfen müssen undGetValueOrDefault()
stattdessen einfach verwenden können .quelle
quelle