Zazwyczaj głównym używanie znaku zapytania jest dla warunkowego x ? "yes" : "no"
.
Ale widziałem inne zastosowanie tego, ale nie mogę na przykład znaleźć wyjaśnienia tego zastosowania ?
operatora.
public int? myProperty
{
get;
set;
}
Oznacza to, że typ wartości, o którym mowa, jest rodzajem zerowalnym
Typy zerowalne są instancjami struktury System.Nullable. Typ dopuszczający wartości zerowe może reprezentować prawidłowy zakres wartości dla swojego podstawowego typu wartości, a także dodatkową wartość zerową. Na przykład,
Nullable<Int32>
wymawianemu „Nullable Int32” można przypisać dowolną wartość od -2147483648 do 2147483647 lub można mu przypisać wartość null.Nullable<bool>
Można przypisać wartości true, false lub null. Możliwość przypisania wartości null do typów numerycznych i boolowskich jest szczególnie przydatna, gdy mamy do czynienia z bazami danych i innymi typami danych, które zawierają elementy, którym nie można przypisać wartości. Na przykład pole boolowskie w bazie danych może przechowywać wartości true lub false lub może być niezdefiniowane.class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
int
typie i odpowiedniejInteger
klasie.To jest skrót od
Nullable<int>
.Nullable<T>
służy do ustawienia typu wartości nanull
. Typy wartości zwykle nie mogą mieć wartości NULL .źródło
value types
nie może być pusty. Jeśli zadeklarujesz int lub bool (które są typami wartości) bez specjalnego przypisania wartości, nadal będą miały wartości (odpowiednio 0 i fałsz), tj. nie byłyby zerowe. Nieprzypisanereference types
, takie jak object lub MyClass, z drugiej strony będą zerowe. Możesz przeczytać o różnicy między typami wartości a typami referencyjnymi.W
? deklaruje zdanie if . Tutaj: x oznacza warunek logiczny; Część przed : to wtedy zdanie, a część po to inny wyrok.
Na przykład
? deklaruje typ zerowalny i oznacza, że typ przed nim może mieć wartość zerową.
źródło
return value ? value : "isNull";
mówi mi, żestring value
nie można zamienić na bool.źródło
deklaruje, że typ jest zerowalny.
źródło
praktyczne zastosowanie:
źródło
Aby dodać do powyższych odpowiedzi, oto przykładowy kod
Dałoby to błąd kompilacji:
Zauważ, że nie ma błędu kompilacji dla NullableTest. (zwróć uwagę na? w deklaracji t2)
źródło
int?
jest skrótem odNullable<int>
. Te dwie formy są wymienne.Nullable<T>
to operator, którego można użyć z typem wartości,T
aby go zaakceptowaćnull
.W przypadku, gdy nie wiem: wartości typy są typami, który przyjmuje wartości jak
int
,bool
,char
itp ...Nie mogą akceptować odwołań do wartości: wygenerowaliby błąd czasu kompilacji, jeśli przypiszesz im a
null
, w przeciwieństwie do typów referencji , które oczywiście mogą to zaakceptować.Dlaczego miałbyś tego potrzebować? Ponieważ czasami zmienne typu wartości mogą otrzymywać referencje zerowe zwracane przez coś, co nie działało zbyt dobrze, na przykład brakującą lub niezdefiniowaną zmienną zwróconą z bazy danych.
Sugeruję przeczytanie Dokumentacji Microsoft, ponieważ dość dobrze obejmuje ona ten temat.
źródło