我是编程的新手,请原谅我的新手。 我正在使用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
这将使我不必每个月创建一个巨大的switch语句。 我不知道是否有办法做到这一点,但任何帮助都是值得赞赏的。
答案 0 :(得分:5)
您提到您当前正在设置文件中存储这些值。
您可以通过键访问您的设置:
public void GetMonthAmount(string month)
{
string keyName = month + "TotalAmount";
object monthData = Properties.Settings.Default[keyName];
}
答案 1 :(得分:3)
正如其他人所建议的那样,您可以使用Dictionary<>
来存储这些值,并将键定义为您也定义的enum。但是,您不能直接拥有此类型的设置值,因此您必须将其包装在类中:
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;
答案 2 :(得分:0)
感谢大家的帮助,所以这是我能够用提供的答案弄清楚的。是的,我正在用代表金额的小数来徘徊。
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();
效果很好,节省了很多空间!
答案 3 :(得分:-1)
一种选择是尝试使用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);
所以现在根据需要创建逻辑。