標籤:val ado 判斷 each current readline body ati 出錯
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\Adobe12 13 rk = Registry.CurrentUser.OpenSubKey(@"Software\Adobe");14 Console.WriteLine(rk == null); //false15 16 //值不存在,沒有指定預設值,返回null17 object obj1 = rk.GetValue("X2009");18 Console.WriteLine(obj1 == null); //true19 20 //項不存在返回null21 rk = Registry.CurrentUser.OpenSubKey(@"Software\X2009");22 Console.WriteLine(rk == null); //true23 24 //--------------------------------------------------25 26 //項存在,值不存在,返回預設值27 object obj = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Adobe", "KEY", "VALUE");28 Console.WriteLine((string)obj == "VALUE"); //true29 30 //項不存在返回null31 obj = Registry.GetValue(@"HKEY_CURRENT_USER\Software\X2009", "KEY", "VALUE");32 Console.WriteLine(obj == null); //true33 34 //--------------------------------------------------35 36 //Software\Adobe\IAC 項存在,子項不存在37 rk = Registry.CurrentUser.OpenSubKey(@"Software\Adobe\IAC");38 Console.WriteLine(rk == null); //false39 string[] arr = rk.GetSubKeyNames();40 Console.WriteLine(arr == null); //false41 Console.WriteLine(arr.Length == 0); //true42 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.NullReferenceException50 51 //總結:52 //OpenSubKey 開啟子項不能以 \ 開頭53 //OpenSubKey、Registry.GetValue、RegistryKey.GetValue 當其項不存在時返回null54 //Registry.GetValue 當其值不存在時返回預設值或null55 //以上兩條可以判斷註冊表的項或值是否存在56 //GetSubKeyNames 當子項不存在時返回空數組而非null57 58 Console.ReadLine();59 }
C#登錄機碼及值為空白測試