Я новичок в программировании, так что извините за мою новизну. Я использую Visual Studio, и в моей программе есть несколько переменных в настройках, которые называются по месяцам;

JanuaryTotalAmount

JanuarySpentAmount

JanuaryGainedAmount

FebruaryTotalAmount

FebruarySpentAmount

FebruaryGainedAmount

ect...

Итак, в моем коде, когда я присваиваю им значения, у меня есть:

Properties.Settings.Default.JanuaryTotalAmount += EnteredAmount;
Properties.Settings.Default.SpentAmount -= EnteredAmount;

Они просто складывают введенные значения, чтобы получить итог.

Но я пытался сохранить свой код более аккуратным, и мне было интересно, есть ли способ, в зависимости от месяца, который пользователь выбирает, он изменит название месяца ...

Так

string month = txtBoxMonth.Text;

Properties.Settings.Default."month"TotalAmount += TotalAmount

Это избавит меня от необходимости создавать гигантский оператор переключения на каждый месяц. Я не знаю, есть ли способ сделать это или нет, но любая помощь приветствуется.

4
Travis 6 Сен 2016 в 12:13

4 ответа

Лучший ответ

Вы упомянули, что в настоящее время храните эти значения в своем файле настроек.

Вы можете получить доступ к своим настройкам с помощью ключа:

public void GetMonthAmount(string month)
{
    string keyName = month + "TotalAmount";
    object monthData = Properties.Settings.Default[keyName];
}
5
plusheen 6 Сен 2016 в 09:30

Как предлагали другие, вы можете использовать Dictionary<> для хранения этих значений с ключом, определенным как перечисление, который вы также определяете. Однако у вас не может быть значение Settings этого типа напрямую, поэтому вам придется заключить его в класс:

public enum Month
{
    January,
    February,
    // and so on...
    December
}


public class Amounts
{
    public Amounts()
    {
        Months = new Dictionary<Month, int>();
    }

    public Dictionary<Month, int> Months { get; set; }
}

Затем вы можете добавить значение в свои настройки для каждой из ваших общих , потраченных и полученных сумм и получить к ним доступ следующим образом:

Properties.Settings.Default.TotalAmounts = new Amounts();

Properties.Settings.Default.TotalAmounts.Months[Month.February] = 5;
3
Richard Ev 6 Сен 2016 в 09:44

Один из вариантов - попробовать использовать Reflection. Используя отражение, вы можете установить / получить значение свойства по имени, используя SetValue и GetValue.
Вы новичок, поэтому вам нужно будет прочитать более подробную информацию, поэтому разместите ссылку для справки.
http://www.tutorialspoint.com/csharp/csharp_reflection.htm
http://www.dotnetperls.com/reflection-property
https://msdn.microsoft.com/en- us / library / axt1ctd9 (v = vs.110) .aspx

Пример кода C # (obj - объект со свойством):

Type type = obj.GetType();
System.Reflection.PropertyInfo propertyInfo = type.GetProperty("JanuaryTotalAmount ");
propertyInfo.SetValue(obj, valueToSet, null);

Итак, теперь создайте логику в соответствии с вашими потребностями.

-1
par 7 Сен 2016 в 09:51

Спасибо всем за помощь, это то, что я смог выяснить с предоставленными ответами. И да, я работал с десятичными знаками, которые представляют денежную сумму.

string key = month + "TotalAmount"; 
decimal tempDec = Convert.ToDecimal(Properties.Setting.Default[key]); // Creates a decimal to store the setting variable in using the key to access the correct setting variable
tempDec += Convert.ToDecimal("EnteredAmount"); // Adds the value of the Setting variable to the amount entered. 
Properties.Settings.Default[key] = tempDec; // Then sets the Setting variable to equal the temp variable.
Properties.Setting.Default.Save();

Он отлично работает и экономит много места!

0
Travis 8 Сен 2016 в 06:41