Как преобразовать значение с нулевым значением int в int? Предположим, что у меня есть 2 типа int, как показано ниже:
int? v1;
int v2;
Я хочу присвоить значение v1 v2. v2 = v1; приведет к ошибке. Как преобразовать v1 в v2?
Как преобразовать значение с нулевым значением int в int? Предположим, что у меня есть 2 типа int, как показано ниже:
int? v1;
int v2;
Я хочу присвоить значение v1 v2. v2 = v1; приведет к ошибке. Как преобразовать v1 в v2?
Остальные ответы пока правильны; Я просто хотел добавить еще немного, что немного чище:
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();
Как это,
if(v1.HasValue)
v2=v1.Value
Вы можете использовать свойство Value для назначения.
v2 = v1.Value;
Все, что вам нужно, это..
v2= v1.GetValueOrDefault();
Вы не можете сделать это, если v1 имеет значение NULL, но вы можете проверить его с помощью оператора.
v2 = v1 ?? 0; Если вы знаете, что значение 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;
GetValueOrDefault()
извлекает значение объекта. Если он равен null, он возвращает значение по умолчанию для int, которое равно 0.
Пример:
v2= v1.GetValueOrDefault();
возможно с помощью v2 = Convert.ToInt32(v1);
Преобразование int nullable в int может быть выполнено следующим образом:
v2=(int)v1;
Вы могли бы сделать
v2 = v1.HasValue ? v1.Value : v2;
Простое преобразование между 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;
}
Насколько я понимаю, лучшим решением является метод GetValueOrDefault().
v2 = v1.GetValueOrDefault();
Он присваивает значение v1 v2, если оно не равно null, иначе оно будет принимать значение по умолчанию как ноль.
v2=v1??0
Или это другой способ записать его.
v2 = v1.HasValue?v1:0