Как преобразовать значение с нулевым значением 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