Я стараюсь получать int с очевидной модели следующего способа:
public class Modelo
{
public int? IntNullable { get; set; }
}
но nullable он не позволяет существу конвертировать это в int нормально.
Почему?
Он не позволяет это тебе из-за одной razГіn очень простая: если стоимости твоего целого числа nullable
null
, "нормальное" целое число не podrГ, - чтобы хранить стоимость.
Есть много возможных решений, очень простая и ясная serГ - в следующую:
int entero = IntNullable ?? 0;
подтверждается, если стоимости IntNullable
null
. Если это так, распределяются 0 в целое число. В противоположном случае, хранится стоимость переменной.
Другая opciГіn состоит в том, чтобы использовать GetValueOrDefault
, подарок с.Net 4.0 для типов Nullables
:
int entero = IntNullable.GetValueOrDefault();
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