为什么这个C#If语句找不到空值?

时间:2012-11-21 15:51:59

标签: c# if-statement

当找不到注册表项时,以下if语句永远不会解析为true。我在这里缺少什么?

if ((Convert.ToString(Registry.GetValue(key, "EnableLinkedConnections", "")) == "0") ||
    (Convert.ToString(Registry.GetValue(key, "EnableLinkedConnections", "")) == null))

4 个答案:

答案 0 :(得分:8)

根据MSDN Docs,您传入的第三个参数是未找到密钥时返回给您的值。

因为您指定了“”(String.Empty) - 这是您应该检查的值,而不是null或“0”。

答案 1 :(得分:5)

当对象返回“”时,Convert.ToString为null。试试string.IsNullOrEmpty()

答案 2 :(得分:2)

因为Registry.GetValue返回一个null对象,Convert.ToString()将转换为您未检查的空字符串(请参阅here)。试试这个:

object value = Registry.GetValue(key, "EnableLinkedConnections", "");
if (value != null)
{
    string text = Convert.ToString(value);
} 

答案 3 :(得分:0)

根据经验,请在Convert.ToString之前检查它是否为null,将它存储在对象中,然后再调用两次相同的方法,这样可以提高性能。

object regystryValue = Registry.GetValue(key, "EnableLinkedConnections", "");

if(regystryValue != null && regystryValue.ToString() =="0"){
//do things
}