У меня возникла странная проблема: при установке значений типа DWORD в реестре Windows из моего приложения С# я продолжаю получать ошибки, когда установлен самый старший бит. По-видимому, существует какая-то проблема преобразования между целыми числами без знака.
Пример: когда я делаю что-то вроде этого
regKey.SetValue("Value", 0x70000000u, RegistryValueKind.DWord);
он отлично работает. Но когда я добавляю самый старший бит (который, поскольку я имею дело с целыми без знака, должен быть просто еще одним битом значения), например
regKey.SetValue("Value", 0xf0000000u, RegistryValueKind.DWord);
Я получаю исключение ( "Тип объекта значения не соответствует указанному RegistryValueKind или объект не может быть правильно преобразован" ).
Но разве это не должно работать? DWORD - это неподписанный 32-разрядный целочисленный тип данных, а также литерал 0xf0000000u
(С# автоматически присваивает ему тип данных UInt32), поэтому они должны быть идеально подходящими (и вручную задавать значение в редакторе реестра "0xf0000000", отлично работает тоже). Это ошибка в .NET или я что-то не так?