一个对象怎么能不被比较为null?

对于KeyValuePair方法,我有一个“可选”参数。 我想要一个重载,将null传递给此参数的核心方法,但在核心方法中,当我想检查KeyValuePair是否为null时,出现以下错误:

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

我怎么能不被允许检查一个对象是否为空?

KeyValuePair<K,V>是一个结构,而不是一个类。 这就像在做:

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

(虽然这实际上是合法的,但有一个警告,由于奇数可转换规则,重要的是if条件永远不会是真的。

要使其成为“可选”,您可以使用可空格式:

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

注意? 在KeyValuePair<object,string>?

我回答这个问题,尽pipe它的年龄,因为它是“testingkeyvaluepair为null”

指定的答案是正确的,但它并没有完全回答这个问题,至less是我遇到的那个问题,我需要testingKeyValuePair的存在性,如果它不存在,就继续对另一个Dictionary进行检查我期待的方式。

使用上面的方法不适合我,因为编译器扼杀获得KeyValuePair<>?KeyValuePair<>? ,所以最好使用default(KeyValuePair<>)在这个问题+答案中看到。 KeyValuePair的默认值

由于KeyValuePair是结构(值types),因此只能比较引用types上的空值。

我猜你还没有写出额外的过载。 当您尝试将null作为KeyValuePair的值时,它将失败。

KeyValuePair <K,V>是一个结构体,因此在任何情况下都不能为null。 只有引用types可以为null。

如果您尝试捕获不正确的值,则必须单独validationKey和Value成员。

您实际上可以使用KeyValuePair.IsNull()来确定是否已设置KeyValuePair。