C#注册表项及值为空测试
1 static void Main(string[] args) 2 { 3 //不能以 \ 开头,否则返回null 4 RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"\Software"); 5 Console.WriteLine(rk == null); //true 6 7 rk = Registry.CurrentUser.OpenSubKey(@"Software"); 8 Console.WriteLine(rk == null); //false 9 10 rk = Registry.CurrentUser.OpenSubKey(@"Software\Adobe"); 11 Console.WriteLine(rk.Name); //HKEY_CURRENT_USER\Software\Adobe 12 13 rk = Registry.CurrentUser.OpenSubKey(@"Software\Adobe"); 14 Console.WriteLine(rk == null); //false 15 16 //值不存在,没有指定默认值,返回null 17 object obj1 = rk.GetValue("X2009"); 18 Console.WriteLine(obj1 == null); //true 19 20 //项不存在返回null 21 rk = Registry.CurrentUser.OpenSubKey(@"Software\X2009"); 22 Console.WriteLine(rk == null); //true 23 24 //-------------------------------------------------- 25 26 //项存在,值不存在,返回默认值 27 object obj = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Adobe", "KEY", "VALUE"); 28 Console.WriteLine((string)obj == "VALUE"); //true 29 30 //项不存在返回null 31 obj = Registry.GetValue(@"HKEY_CURRENT_USER\Software\X2009", "KEY", "VALUE"); 32 Console.WriteLine(obj == null); //true 33 34 //-------------------------------------------------- 35 36 //Software\Adobe\IAC 项存在,子项不存在 37 rk = Registry.CurrentUser.OpenSubKey(@"Software\Adobe\IAC"); 38 Console.WriteLine(rk == null); //false 39 string[] arr = rk.GetSubKeyNames(); 40 Console.WriteLine(arr == null); //false 41 Console.WriteLine(arr.Length == 0); //true 42 43 //遍历一个空数组不会出错 44 string[] ss = new string[0]; 45 foreach (string s in ss) { } 46 47 //遍历一个null数组会出错 48 ss = null; 49 //foreach (string s in ss) { } //System.NullReferenceException 50 51 //总结: 52 //OpenSubKey 打开子项不能以 \ 开头 53 //OpenSubKey、Registry.GetValue、RegistryKey.GetValue 当其项不存在时返回null 54 //Registry.GetValue 当其值不存在时返回默认值或null 55 //以上两条可以判断注册表的项或值是否存在 56 //GetSubKeyNames 当子项不存在时返回空数组而非null 57 58 Console.ReadLine(); 59 }