C#註冊表項及值為空測試
阿新 • • 發佈:2018-01-13
lin 判斷 class sys foreach name object gis for
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 }
C#註冊表項及值為空測試