Работает как задумано, я бы сказал:
PrintLength (с);
Вы передаете одну строку, которая является нулевой - внутри вашего метода items
будет не быть нулевой - это массив из одного элемента - типа строка - значения null
PrintLength (s, s);
Та же история здесь - вы передаете два элемента, поэтому items
в вашем методе будет массивом из двух строк - каждая из которых равна нулю, но массив не равен
PrintLength (нуль);
Это, очевидно, интерпретируется как одно значение NULL, и, таким образом, items
равно нулю. Вы не передаете ни массив, ни элемент типа string - вы просто передаете пустое значение как таковое.
PrintLength (null, null);
Это снова - массив из двух элементов, каждый из которых равен нулю, но сам по себе массив не равен нулю, поскольку вы передаете два значения.
Возможно, это немного озадачивает, но на самом деле: в вашем методе PrintLength
нужно проверить не то, равен ли ваш Items
в целом ноль, а фактические значения items[0]
и т.д. нуль.
Что может быть немного странным - или поначалу нелогичным - это тот факт, что одно явное «нулевое» значение обрабатывается как «нулевое», а не как массив одного элемента со значением «ноль». Почему это так и могло ли это быть реализовано иначе - я не знаю, честно говоря.