Как нельзя сравнивать объект с нулевым?

У меня есть параметр "необязательный" для метода, который является KeyValuePair. Мне нужна перегрузка, которая передает null в основной метод для этого параметра, но в основном методе, когда я хочу проверить, имеет ли KeyValuePair значение null, я получаю следующую ошибку:

Operator '!=' cannot be applied to operands of type System.Collections.Generic.KeyValuePair<string,object>' and '<null>. 

Как мне не разрешить проверять, является ли объект нулевым?

Ответ 1

KeyValuePair<K,V> - это структура, а не класс. Это нравится делать:

int i = 10;
if (i != null) ...

(Хотя это действительно легально, с предупреждением из-за нечетных правил преобразования NULL. Важный бит заключается в том, что условие if никогда не будет истинным.)

Чтобы сделать его "необязательным", вы можете использовать форму с нулевым значением:

static void Foo(KeyValuePair<object,string>? pair)
{
    if (pair != null)
    {
    }
    // Other code
}

Обратите внимание на? в KeyValuePair<object,string>?

Ответ 2

Я отвечаю на это, несмотря на его возраст, потому что это первый результат Google для "testvalvaluepair to null"

Ответ указан правильно, но он не полностью отвечает на проблему, по крайней мере, тот, который у меня был, где мне нужно проверить существование KeyValuePair и перейти к другой проверке Dictionary если он не существует, как я ожидаю.

Использование вышеописанного метода не сработало для меня, потому что компилятор задыхается при получении KeyValuePair.Value из KeyValuePair<>?, поэтому лучше использовать default(KeyValuePair<>), как видно из этого вопроса + ответов. Значение по умолчанию для KeyValuePair

Ответ 3

Поскольку KeyValuePair является структурой (тип значения), вы можете сравнивать только нули в ссылочных типах.

Я предполагаю, что вы еще не написали эту дополнительную перегрузку. Он будет терпеть неудачу, если вы попытаетесь передать null как значение KeyValuePair.

Ответ 4

KeyValuePair < K, V > является структурой и, следовательно, ни при каких обстоятельствах не может быть нулевым. Только ссылочный тип может быть нулевым.

Если вы пытаетесь поймать неверное значение, вам придется проверять элементы Key и Value по отдельности.

Ответ 5

Фактически вы можете использовать KeyValuePair.IsNull(), чтобы определить, установлен ли KeyValuePair.