Почему int?! = int?

Я стараюсь получать int с очевидной модели следующего способа:

public class Modelo
{
    public int? IntNullable { get; set; }
}

но nullable он не позволяет существу конвертировать это в int нормально.

Почему?

2
задан 06.11.2019, 13:01
2 ответа

Он не позволяет это тебе из-за одной razГіn очень простая: если стоимости твоего целого числа nullable null, "нормальное" целое число не podrГ, - чтобы хранить стоимость.

Есть много возможных решений, очень простая и ясная serГ - в следующую:

int entero = IntNullable ?? 0;

подтверждается, если стоимости IntNullable null. Если это так, распределяются 0 в целое число. В противоположном случае, хранится стоимость переменной.

Другая opciГіn состоит в том, чтобы использовать GetValueOrDefault, подарок с.Net 4.0 для типов Nullables:

int entero = IntNullable.GetValueOrDefault();
4
ответ дан 01.12.2019, 12:35

AГ±adir неясность ? - sГіlo один azГєcar sintГЎctico для System.Nullable. Ты не можешь распределять примитивной одной объект:

int i = new System.Nullable<int>();
error CS0266: Cannot implicitly convert type 'int?' to 'int'.

, Но ты можешь обращать это в нижележащий тип:

int i = (int)(new System.Nullable<int>());
//      ^^^^^ <---- Convierte a int
Console.WriteLine(i);

, Хотя cГіdigo предыдущий он вызывает одну excepciГіn:

System.InvalidOperationException: Nullable object must have a value.

Это происходит, потому что nullables могут быть недействительными, но примитивные - нет. Если ты распределяешь ему стоимость в nullable , ты предотвращаешь ее excepciГіn:

int i = (int)(new System.Nullable<int>(42));
Console.WriteLine(i); // Muestra 42
2
ответ дан 01.12.2019, 12:35
  • 1
    с примитивной, ¿ что ты имеешь в виду?, когда бы то ни было escuché эта expresió n. –  Nicolas Oñate 06.11.2019, 13:16
  • 2
    Я отношусь в тип built-in , которые были бы простыми (он консультирует раздел Remarks ). –  PaperBirdMaster 06.11.2019, 13:19