Остальные ответы пока верны;Я просто хотел добавить еще один, который немного чище:
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();