<i>&gt;Surely it is true or false, but not null.</i><p>If that&#x27;s surely what you have, then you have a regular &quot;bool&quot; and not nullable &quot;bool?&quot;.<p>In C#, &quot;bool&quot; and &quot;bool?&quot; are <i>not the same type</i>. (Although C# provides some convenient implicit conversions that minimize tedious verbosity when working with both -- but that convenience also has the effect of blurring the lines.  Nevertheless, they are different types.)<p>A &quot;bool&quot; can represent 2-states.  A &quot;bool?&quot; can represent 3-states: true -or- false -or-  unknown&#x2F;empty&#x2F;indeterminate&#x2F;invalid&#x2F;etc.<p>Your premise that I quoted is <i>constrained</i> to 2 states -- therefore use the 2-state type which is plain &quot;bool&quot;.  Unless you think nullable &quot;bool?&quot; as a syntax seems to defy some kind of airtight mathematical logic?  What would be the alternative?!?  Have everyone create a custom enum that with 3 enum values &quot;{falsy = 0; truthy = 1; unknown = 2}&quot;?  Why would reinvention of those semantics in everyone&#x27;s redundant code snippets be better than C#&#x27;s standard nullable &quot;bool?&quot;?<p>(Another issue that may confuse the &quot;null&quot; discussion is the 2 separate concepts of &quot;null&quot;:  #1 is &quot;null&quot; as an indicator of pointing to invalid memory and #2 is &quot;null&quot; as <i>deliberate semantic</i> placeholders for application&#x2F;business logic of <i>unknown values</i>.  The #2 concept is what is modeled by C# nullable&lt;T&gt; and SQL database fields.)