我的环境是:W7 Ultimate 64位,VS2010 Ultimate,C#,WinForm,目标XP和W7。
在@dasblinkenlight的帮助下,for循环的连接非常好。 我觉得我们正在取得很大的进步。 正如您所看到的,我们将数组sMntHour [d,h]放入字符串" csv_001_01"如果d = 1且h = 1,依此类推。
这是csv_001_01,csv_001_02,..;是包含整数值的变量。
csv_001_01=5111;
csv_001_02=236; // This is a sample, because has 365 days in normal year
// and 366 days in leaf year. "csv_day_hour"
我们可以直接做到这一点:
sMntHour[d,h] = csv_001_01.ToString(); // d is day and h is hour
sMntHour[d,h] = csv_001_02.ToString();
因为我们将这个连接变量的值放在数组中而不是变量的名称?
for(int d=1;d<=365;d++) //I'll put the code to not leap years.
{
for(int h=1; h<=24; h++)
{
sMntHour[d,h] = string.Format("csv_{0:000}_{1:00}", d, h)
}
}
答案 0 :(得分:2)
如果我明白你的意思,你就拥有了所有的变量名,现在你想得到它们的价值。
您可以使用Reflection
执行此操作,您可以创建一个字典,其中键是变量名称,值是实际值。如果不了解这些变量是如何声明的,它们是字段/属性真的很难帮助吗?是私人的,静态的吗?等等......但理论上这样的事情应该有效:
var type = this.GetType();
var values = sMntHour.OfType<string>()
.ToDictionary(
x => x,
x => (int)type.GetField(x).GetValue(this));
然后,您可以使用values["variable_name"]
或者,如果您不想要这个,相反,如果您想使用评论中提到的[d,h]
之类的索引来访问它们,请不要将变量名称存储在第一位,而是将值存储在您的阵列:
var type = this.GetType();
for(int d=1;d<=365;d++)
{
for(int h=1; h<=24; h++)
{
var name = string.Format("csv_{0:000}_{1:00}", d, h);
sMntHour[d,h] = (int)type.GetField(name).GetValue(this);
}
}
当然,您需要更改sMntHour
的类型,以使其有效。