文書化されていない場合、何かを推測できないことに同意しますが、多くの場合、文書が間違っている、古い、または存在しない可能性があります。
したがって、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
これはあなたの明確な答えです。