一个对象怎么能不被比较为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。