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