?
является сокращением для структуры ниже:
struct Nullable<T>
{
public bool HasValue;
public T Value;
}
Вы можете использовать эту структуру напрямую, но ?
- это синтаксис быстрого доступа, чтобы сделать полученный код намного чище. Вместо того, чтобы печатать:
Nullable<int> x = new Nullable<int>(125);
Вместо этого вы можете написать:
int? x = 125;
Это не работает со строкой, поскольку строка является ссылочным типом, а не типом значения.