如何将对象与null进行比较?

时间:2009-03-15 16:48:46

标签: c# .net generics

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

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

如何禁止检查对象是否为空?

5 个答案:

答案 0 :(得分:80)

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>?

答案 1 :(得分:13)

我正在回答这个问题,尽管它的年龄很大,因为它是“测试keyvaluepair为null”的第一个Google结果

指定的答案是正确的,但它并没有完全回答问题,至少是我所拥有的问题,我需要测试KeyValuePair的存在并继续检查Dictionary {1}}如果它不存在我期待的方式。

使用上述方法对我不起作用,因为编译器在获取KeyValuePair.Value的{​​{1}}时会窒息,因此最好使用KeyValuePair<>?,如此问题+答案中所示。 The default for KeyValuePair

答案 2 :(得分:6)

因为KeyValuePair是结构(值类型),所以只能比较引用类型的空值。

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

答案 3 :(得分:3)

KeyValuePair&LT; K,V&GT;是一个结构,因此在任何情况下都不能为null。只有引用类型可以为null。

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

答案 4 :(得分:-9)

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