> “not null” is of course also null.<p>I love Eric Lipper, but he's just wrong here. This isn't SQL. He's treating null to mean "unknown", whereas it really means "nothing" (aka "absent" aka "missing value"). The opposite of an absent value is a present value (but an unknown one), which has no equivalent type in C#. (Or I guess you could say the opposite of "no value" is "every value".) Given those aren't options, the closest choice we have available is: true.<p>If you insist on treating null as "unknown" then you just destroy everything you know about the language. e.g., (null == x) and (null != x) would both have to always evaluate to null. Which is (thankfully) not how C# works.