Есть код
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);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Работаю с xNet, возникла проблемаНужно получить информацию из combobox1 + textbox1 в потоке
В общем, такая проблема: У меня есть семейство классов, очень близких по смыслу
В phpStorme есть watcher который компилит стили less в cssА как минифицировать css, который собран из less? - т