Відповіді:
Це означає, що відповідний тип значення - це нульовий тип
Зменшувані типи є екземплярами структури System.Nullable. Нульовий тип може представляти правильний діапазон значень для його базового типу значення плюс додаткове нульове значення. Наприклад, a
Nullable<Int32>
, вимовляється "Nullable of Int32", може бути призначене будь-яке значення від -2147483648 до 2147483647, або йому може бути присвоєно нульове значення. ANullable<bool>
можуть бути призначені значення true, false або null. Можливість присвоєння нулю числовим і булевим типам особливо корисна, коли ви маєте справу з базами даних та іншими типами даних, що містять елементи, яким не може бути призначено значення. Наприклад, булеве поле в базі даних може зберігати значення true або false або вони можуть бути невизначені.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
тип і відповідний Integer
клас, наприклад.
Це скорочення для Nullable<int>
. Nullable<T>
використовується, щоб дозволити встановити тип значення null
. Типи значення зазвичай не можуть бути нульовими .
value types
не може бути нульовим. Якщо ви оголосите int або bool (які є типовими типами), не призначаючи значення, вони все одно матимуть значення (0 та false, відповідно), тобто. вони не були б нульовими. reference types
З іншого боку, непризначений , наприклад об’єкт або MyClass, буде недійсним. Ви можете прочитати про різницю між типами значень та типовими типами.
В
x ? "yes" : "no"
то ? оголошує речення if . Тут: x являє булеву умову; Частина до : це те пропозицію , а частина після того, як це ще пропозицію.
У, наприклад,
int?
то ? оголошує нульовий тип і означає, що тип перед ним може мати нульове значення.
return value ? value : "isNull";
підказує мені, що string value
не перетворюється в bool.
Зменшувані типи є екземплярами структури System.Nullable. Нульовий тип може представляти нормальний діапазон значень для його базового типу значення плюс додаткове нульове значення . Наприклад, [
Nullable<Int32>
], вимовляється "Nullable of Int32", може бути призначене будь-яке значення від -2147483648 до 2147483647, або йому може бути призначено нульове значення. [Nullable<bool>
] Може бути призначено значення true або false або null. Можливість присвоєння нулю числовим і булевим типам особливо корисна при роботі з базами даних та іншими типами даних, що містять елементи, яким не може бути призначено значення. Наприклад, булеве поле в базі даних може зберігати значення true або false або вони можуть бути невизначені.
він оголошує, що тип є нульовим.
практичне використання:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
Щоб додати відповіді вище, ось зразок коду
struct Test
{
int something;
}
struct NullableTest
{
int something;
}
class Example
{
public void Demo()
{
Test t = new Test();
t = null;
NullableTest? t2 = new NullableTest();
t2 = null;
}
}
Це призведе до помилки компіляції:
Помилка 12 Неможливо перетворити null у "Test", оскільки це нерегульований тип значення
Зауважте, що для NullableTest немає помилки компіляції. (зверніть увагу на? у декларації t2)
int?
це скорочення для Nullable<int>
. Дві форми взаємозамінні.
Nullable<T>
це оператор, який ви можете використовувати з типом значення, T
щоб змусити його приймати null
.
Якщо ви цього не знаєте: типи значень - це типи, які приймають значення як int
, bool
і char
т.д. ...
Вони не можуть приймати посилання на значення: вони створюють помилку під час компіляції, якщо призначити їм a null
, на відміну від типів посилань , які, очевидно, можуть прийняти його.
Навіщо вам це потрібно? Тому що іноді змінні типу значення можуть отримувати нульові посилання, повернені чимось, що не дуже добре працює, як, наприклад, відсутня або невизначена змінна, повернута з бази даних.
Я пропоную вам прочитати документацію Microsoft, оскільки вона досить добре висвітлює тему.