Это зависит, на какой информации Вам нужно и какие рабочие процессы Вы хотите поддерживать.
Делают Вы хотите быть в состоянии к:
, Если запись была удалена и восстановила после удаления четыре раза, он достаточный для Вас, чтобы знать, что это в настоящее время находится в восстановленном после удаления состоянии, или сделайте Вы хотите быть в состоянии сказать то, что произошло тем временем (включая любые редактирования между последовательными удалениями!)?
Definitely use a nullable value type - that's what they're for. It explicitly states your intention. It also means you can use Enum.IsDefined
(or the equivalent from Unconstrained Melody if you want generic type safety) to easily determine whether a particular value is a real value without worrying about the "fake" one too.
If it's nullable, you'd get it as a default value, you'd get exceptions if you tried to use it when null (which is a good thing!)
Вам просто нужно решить, нужно ли вам значение для представления неизвестных значений или вам нужен способ представить отсутствие какого-либо значения.
В случае необходимости представить неизвестное values, дополнительный член перечисления выглядит хорошим решением.
В случае необходимости представить отсутствие какого-либо значения, сделайте его допускающим значение NULL.
Имейте в виду, что нет ничего плохого в том, чтобы иметь оба «неизвестных» enum-member и само перечисление одновременно допускают значение NULL.
HTH.