捕获连接变量的值

时间:2014-08-06 16:16:14

标签: c#

我的环境是: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)
  }
}    

1 个答案:

答案 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的类型,以使其有效。