Есть код
public RegClassSave(int sumDay, DateTime date)
{
try
{
int RegResult = SumResultDay;
SumDay = sumDay;
DateN = date;
RegistryKey KnockOff = currentUserKey.CreateSubKey("KnockOff");
KnockOff.SetValue("Amout", SumDay);
KnockOff.SetValue("AmoutResult", SumResultDay);
KnockOff.SetValue("Date", DateN);
KnockOff.Close();
string Amout = currentUserKey.OpenSubKey("KnockOff", true).GetValue("Amout").ToString();
string AmoutResult = currentUserKey.OpenSubKey("KnockOff", true).GetValue("AmoutResult").ToString();
string Date = currentUserKey.OpenSubKey("KnockOff", true).GetValue("Date").ToString();
RegResult += Convert.ToInt32(Amout) + Convert.ToInt32(AmoutResult);
Console.WriteLine("Введённая сумма = {0} Результат = {1} Дата внесения = {2}", Amout, RegResult, Date);
}
catch (Exception e)
{
Console.WriteLine("Ошибка {0}", e);
}
}
}
В реестр всё добовляеться. Я не как не могу сделаь так что бы после запуска второй раз и ввода ещё одного числа, в реестор на место поля (AmoutResult) записывалось уже новое число (Amout + AmoutResult) тоесть сумма чисел. Считывание тоже работает.
Вызов делаю так
class Program
{
static void Main(string[] args)
{
int EnterSum = Convert.ToInt32(Console.ReadLine());
RegClassSave regClassSave = new RegClassSave(EnterSum, DateTime.Now);
}
}
Не могу понять по чему не работает.
Здесь считываю и добавляю значение в int RegResult = SumResultDay; и таким образом при следующем вызове значение присваивается вSumResultDay
C# так не работает. RegResult — локальная переменная. Она каждый раз создается заново и изменения ее значения ни на чем не отражаются, если этого отдельно не прописать.
Можно сохранять общую сумму в SumResultDay — это свойство класса и оно будет сохраняться пока есть объект, которому оно принадлежит. Для этого можно ему присваивать значение в конце метода:
SumResultDay = RegResult;
Либо вообще обойтись без RegResult:
SumResultDay = Convert.ToInt32(Amout) + Convert.ToInt32(AmoutResult);
Но тут возникнет другая проблема: Вы все делаете в конструкторе, а значит при каждом сохранении создается новый объект, с новыми свойствами и значение им присваивается по умолчанию (0).
Логичнее будет каждый раз вычитывать данные из реестра:
RegistryKey knockOff = currentUserKey.CreateSubKey("KnockOff");
//читаем значение из реестра
var value = knockOff.GetValue("AmoutResult");
int amountResult = Convert.ToInt32(value);
//прибавляем текущее значение
amountResult += sumDay;
...
//и лишь потом сохраняем сумму
knockOff.SetValue("AmoutResult", amountResult);
Тогда актуальное значение будет храниться в реестре и обновляться по необходимости. Вам понадобится также добавить проверку значения реестра на null чтобы при отсутствии значения в реестре записывать текущую сумму.
Еще, от конструктора ожидается что он будет выполнять только инициализацию класса, а не сложные манипуляции с реестром. Так что лучше было бы код перенести из конструктора в методы и свойства. Например, чтобы с классом можно было работать так:
RegClassSave regClassSave = new RegClassSave;
//свойство для хранения даты
regClassSave.DateN = DateTime.Now;
//метод, который работает с реестром и текущей суммой
regClassSave.Save(EnterSum);
//свойство для чтения общей суммы
Console.WriteLine(regClassSave.SumResultDay);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости