Как преобразовать С# nullable int в int

Как преобразовать значение с нулевым значением int в int? Предположим, что у меня есть 2 типа int, как показано ниже:

int? v1;  
int v2; 

Я хочу присвоить значение v1 v2. v2 = v1; приведет к ошибке. Как преобразовать v1 в v2?

Ответ 1

Остальные ответы пока правильны; Я просто хотел добавить еще немного, что немного чище:

v2 = v1 ?? default(int);

Любой Nullable<T> неявно конвертируется в свой T, ПРЕДОСТАВЛЯЕТ, что все оцениваемое выражение никогда не может привести к присвоению нулей ValueType. Таким образом, оператор с нулевым коалесцированием ?? является просто синтаксическим сахаром для тернарного оператора:

v2 = v1 == null ? default(int) : v1;

... который, в свою очередь, содержит синтаксический сахар для if if else:

if(v1==null)
   v2 = default(int);
else
   v2 = v1;

Кроме того, с .NET 4.0 Nullable<T> имеет метод GetValueOrDefault(), который является нулевым безопасным получателем, который в основном выполняет свертывание с нулевым кодом, показанное выше, поэтому это тоже работает:

v2 = v1.GetValueOrDefault();

Ответ 2

Как это,

if(v1.HasValue)
   v2=v1.Value

Ответ 3

Вы можете использовать свойство Value для назначения.

v2 = v1.Value;

Ответ 4

Все, что вам нужно, это..

v2= v1.GetValueOrDefault();

Ответ 5

Вы не можете сделать это, если v1 имеет значение NULL, но вы можете проверить его с помощью оператора.

v2 = v1 ?? 0;

Ответ 6

Если вы знаете, что значение v1 имеет значение, вы можете использовать свойство Value:

v2 = v1.Value;

Использование метода GetValueOrDefault присваивает значение, если оно есть, в противном случае значение по умолчанию для типа или заданное по умолчанию значение:

v2 = v1.GetValueOrDefault(); // assigns zero if v1 has no value

v2 = v1.GetValueOrDefault(-1); // assigns -1 if v1 has no value

Вы можете использовать свойство HasValue, чтобы проверить, имеет ли значение v1:

if (v1.HasValue) {
  v2 = v1.Value;
}

Существует также поддержка языка для метода GetValueOrDefault(T):

v2 = v1 ?? -1;

Ответ 7

GetValueOrDefault()

извлекает значение объекта. Если он равен null, он возвращает значение по умолчанию для int, которое равно 0.

Пример:

v2= v1.GetValueOrDefault();

Ответ 8

возможно с помощью v2 = Convert.ToInt32(v1);

Ответ 9

Преобразование int nullable в int может быть выполнено следующим образом:

v2=(int)v1;

Ответ 10

Вы могли бы сделать

v2 = v1.HasValue ? v1.Value : v2;

Ответ 11

Простое преобразование между v1 и v2 невозможно, так как v1 имеет большую область значений, чем v2. Это все v1 может содержать плюс состояние null. Для преобразования вам необходимо явно указать, какое значение в int будет использовано для отображения состояния null. Самый простой способ сделать это - оператор ??

v2 = v1 ?? 0;  // maps null of v1 to 0

Это также можно сделать в длинной форме

int v2;
if (v1.HasValue) {
  v2 = v1.Value;
} else {
  v2 = 0;
}

Ответ 12

Насколько я понимаю, лучшим решением является метод GetValueOrDefault().

v2 = v1.GetValueOrDefault();

Ответ 13

Он присваивает значение v1 v2, если оно не равно null, иначе оно будет принимать значение по умолчанию как ноль.

v2=v1??0

Или это другой способ записать его.

v2 = v1.HasValue?v1:0