我同意如果没有记录,你不能假设某些事情,但很多时候文档可能是错误的、过时的或不存在的。
因此,当使用 JetBrains 的 dotPeek 并查看 mscorlib.dll 时,我们看到以下代码用于拉取 SubKeyNames:
[SecuritySafeCritical]
Public String[] GetSubKeyNames()
{
this.CheckPermission(RegistryKey.RegistryInternalCheck.CheckKeyReadPermission, (String) null, False, RegistryKeyPermissionCheck.Default);
Return this.InternalGetSubKeyNames();
}
[SecurityCritical]
internal unsafe String[] InternalGetSubKeyNames()
{
this.EnsureNotDisposed();
Int length1 = this.InternalSubKeyCount();
String[] strArray = New String[length1];
If (length1 > 0)
{
Char[] chArray = New Char[256];
fixed (Char* lpName = &chArray[0])
{
For (Int dwIndex = 0; dwIndex < length1; ++dwIndex)
{
Int length2 = chArray.Length;
Int errorCode = Win32Native.RegEnumKeyEx(this.hkey, dwIndex, lpName, ref length2, (Int[]) null, (StringBuilder) null, (Int[]) null, (Long[]) null);
If (errorCode != 0)
this.Win32Error(errorCode, (String) null);
strArray[dwIndex] = New String(lpName);
}
}
}
Return strArray;
}
所以 - 订单将始终使用 RegEnumKeyEx 函数。看那里我们看到“因为子键没有排序,任何新的子键都将有一个任意的索引。这意味着该函数可以以任何顺序返回子键。”
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724862(v=vs.85).aspx
这是你的肯定答案。