Equals在字符串和int的可空之间有不同的行为

时间:2014-08-01 07:28:42

标签: c#

为什么Equals在int的字符串和可空之间有不同的行为?

((int?)null).Equals(null)

该指令返回true

((String)null).Equals(null)

此指令throw null为null

那么,如何检查键(null,String)的KeyValuePair是否为空

修改 我不能使用String.IsNullOrEmpty因为我使用了一些KeyValuePair列表(String,String) 和一些KeyValuePair列表(Int?,String) 其中键可以为null或String.Empty 例如,列表可以过滤国家/地区列表:

myList.Add(new KeyValuePair(null, "Undefined"));
myList.Add(new KeyValuePair("", "Empty"));
myList.Add(new KeyValuePair("ID101", "France"));
myList.Add(new KeyValuePair("ID102", "Spain"));

2 个答案:

答案 0 :(得分:6)

此情况下的行为有所不同,因为Nullable<T>值类型,而String引用类型

所以这个:

(int?)null

实际上有一个值,因为它是一个值类型。因此,您可以在其上调用方法。

在任何情况下,这都与底层问题正交,如何检查string类型的KeyValuePair键是否为空...

仅仅是:

if (kvp.Key == null)

如果null的处理方式与String.Empty相同,则可以使用此方法:

if (string.IsNullOrEmpty(kvp.Key))

如果密钥只包含空格(空格,制表符,换行符等),这也是等效的,你可以使用它:

if (string.IsNullOrWhiteSpace(kvp.Key))

答案 1 :(得分:1)

((String)null)此时你有一个null - 因此.Equals不存在。

String.IsNullOrEmpty()用于测试一个null或等于string的字符串.Empty