// Get the Guid? itself, for sake of example from IQueryable<Guid?>
// (could be `null` from DB value or because queryable was empty)
Guid? maybeGuid = queryable.FirstOrDefault();
// Need to have *a* GUID or default it to something
// because a Guid is a value-type and needs *a* value.
Guid theGuid = maybeGuid ?? Guid.Empty;
Также см. Nullable<T>.HasValue/Value
- более длинный, но эквивалентный метод будет:
Guid theGuid = maybeGuid.HasValue ? maybeGuid.Value : Guid.Empty;
Обратите внимание, что HasValue
может подойти в общем случае if
для изменения логикиТакже обратите внимание, что Value
сгенерирует исключение, если MaybeGuid "не имеет значения" - null
- поэтому требуется защита.
Счастливое кодирование.
Педантичная деталь: эквивалентный метод не является "безопасным для потоков".То есть, предполагая, что maybeGuid
является общим, ему может быть назначено null
между HasValue
и Value
.Существует ряд вопросов SO, которые охватывают «безопасность потока» ??
(оператор объединения) - сгенерированный IL эффективно использует временную переменную, поэтому значение может быть устаревшим, но исключение не может быть выдано.