Это наиболее очевидное использование для Nullable<bool>
Ваше "очевидное" поведение приводит ко многим неочевидным поведениям.
Если
if(x)
считается ложным, когда x равен нулю, тогда что должно произойти с
if(!x)
?!x
также равно нулю, когда x равно нулю, и поэтому будет также рассматриваться как ложное!Не кажется ли странным, что вы не можете изменить поведение условного выражения с помощью инверсии?
Как насчет
if (x | !x)
Конечно, это всегда должно быть правдой, но если x равно нулю, тогда целоевыражение равно нулю и, следовательно, ложно.
Лучше избегать этих неочевидных ситуаций, просто делая их незаконными.C # - это «заставить пользователя говорить то, что он имеет в виду однозначно».
Я считаю, что VB ведет себя так, как вы хотите.Вы можете подумать о переходе на VB, если вам это нравится.