Чтение реестра с помощью set и get свойств

#c# #registry

#c# #реестр

Вопрос:

Я не уверен, что я здесь делаю не так. У меня есть класс, созданный для получения некоторых значений reg-ключа, и я продолжаю получать ошибки приведения типов. Я передаю имя ключа. Значением ключа является значение int. Которое также должно быть возвращаемым значением.

Я продолжаю получать эту ошибку

Не удается неявно преобразовать тип ‘string’ в int

в следующих расположениях:

 rValue = (string)myKey.GetValue("DebugLog");
amp;set { DebugLog = getDebugLog(value);}
  

обратите внимание на это в в c#

 private int DebugLog;

private int getDebugLog(String name)
{
    int rValue;
    myKey = Registry.LocalMachine.OpenSubKey(regKey   name, false);
    rValue = (string)myKey.GetValue("DebugLog");
    return rValue;
}

public int debugLog
{
    get { return DebugLog; }
    set { DebugLog = getDebugLog(value);}
}
  

Ответ №1:

Реестр здесь не имеет значения — вы присваиваете значение string , а затем пытаетесь присвоить это выражение int переменной. Это похоже на это:

 object x = "hello";
int y = (string) x;
  

Это никогда не сработает. Если вы хотите преобразовать строку в целое число, вам нужно проанализировать ее, например, с помощью int.Parse или int.TryParse .

Если значение в реестре на самом деле является целым числом, просто приведите его к этому.

Ответ №2:

 rValue = Convert.ToInt32(myKey.GetValue("DebugLog"));
  

Ответ №3:

Вы объявляете rValue как int, но задаете его как строку. Попробуйте это:

 rvalue = Int32.Parse((string)myKey.GetValue("DebugLog"));
  

Комментарии:

1. ok rvalue = Int32.Parse((строка)MyKey. GetValue(«DebugLog»)); сработало, теперь я получаю сообщение cannot convert from int to string с помощью методов get и set. public int debugLog { get { return DebugLog; } set { DebugLogAutoRoll = getDebugLog(значение);} }

2. Вам нужно будет написать функцию set с помощью MyKey. GetValue(«Журнал отладки», значение. toString()). Если хотите, пожалуйста, примите этот ответ.

Ответ №4:

Что такое «Журнал отладки»? Значение уже установлено?

 private int getDebugLog(String name)
{
  int rValue;
  myKey = Registry.LocalMachine.OpenSubKey(regKey   name, false);
  object o = myKey.GetValue("DebugLog");
  if (o != null) {
    rValue = o.ToString();
    if (!String.IsNullOrEmpty(rValue)) {
      return Convert.ToInt32(Convert.ToDecimal(rValue));
    }
  }
  return null;
}
  

Комментарии:

1. вы не можете вернуть null для функции int.