Это не наш тип - это стандартный тип Nullable:
https://msdn.microsoft.com/en-us/library/2cf62fcy.aspx
То есть такая переменная может быть равна null.
HasValue - это как раз проверка на Null (есть ли значение в переменной)
Value - само значение (если оно там есть).