Как конвертировать C # обнуляемый int в int - PullRequest
427 голосов
/ 13 мая 2011

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

int? v1;  
int v2; 

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

Ответы [ 15 ]

574 голосов
/ 13 мая 2011

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

v2 = v1 ?? default(int);

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

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

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

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

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

v2 = v1.GetValueOrDefault();
149 голосов
/ 13 мая 2011

Как это,

if(v1.HasValue)
   v2=v1.Value
81 голосов
/ 13 мая 2011

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

v2 = v1.Value;
73 голосов
/ 04 марта 2016

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

v2= v1.GetValueOrDefault();
45 голосов
/ 13 мая 2011

Если вы знаете, что 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;
42 голосов
/ 13 мая 2011

Вы не можете сделать это, если v1 равен нулю, но вы можете проверить с оператором.

v2 = v1 ?? 0;
27 голосов
/ 11 февраля 2016

GetValueOrDefault()

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

Пример:

v2= v1.GetValueOrDefault();

12 голосов
/ 04 ноября 2017

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

v2 = v1.GetValueOrDefault();
12 голосов
/ 12 июня 2015

Преобразование Int Nullable в Int может быть сделано так:

v2=(int)v1;
11 голосов
/ 30 мая 2012

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

...