Я начинаю изучать обнуляемые типы и столкнулся со следующим поведением.
При попытке обнулять int, я вижу, оператор сравнения дает мне неожиданный результат. Например, в моем коде ниже, вывод, который я получаю: «оба и 1 равны» . Обратите внимание, что он также не печатает "ноль".
int? a = null;
int? b = 1;
if (a < b)
Console.WriteLine("{0} is bigger than {1}", b, a);
else if (a > b)
Console.WriteLine("{0} is bigger than {1}", a, b);
else
Console.WriteLine("both {0} and {1} are equal", a, b);
Я надеялся, что любое неотрицательное целое число будет больше нуля. Я что-то здесь упускаю?
Ответы:
Согласно MSDN - это вниз по странице в разделе «Операторы»:
Так что и так
a > b
иa < b
оцениватьfalse
такa
как ноль ...источник
nothing <> 1
=null
в VB, тогда какnull != 1
=true
в C # - я использовал LinqPad для проверки утвержденийLifted Operators
в C # stackoverflow.com/questions/3370110/what-are-lifted-operators - я подумал, может ли это быть причиной того, что VB.NET возвращает разные результатыКак говорит MSDN
источник
Подводя итог: ни в какое сравнение с нулем неравенство (
>=
,<
,<=
,>
) возвращаетfalse
даже если оба операнда равны нулю. т.е.Любое сравнение на равенство или неравенство с null (
==
,!=
) работает «как положено». т.е.источник
int? nonNull
иint notNull
?Nullable<NumberTypes> = null
. Проверенные.Сравнение C # с SQL
C #: a = null и b = null => a == b => true
SQL: a = null и b = null => a == b => false
источник