为什么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"));
答案 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