Ocaccy Pontes
Ocaccy Pontes

Reputation: 257

Catching value of the concatenated variable

My environment is: W7 Ultimate 64 bits, VS2010 Ultimate, C#, WinForm, target XP and W7.

With the help of @dasblinkenlight, the concatenation on the for loop was very good. I feel we are making great progress. As you ca see, we are putting into the array sMntHour[d,h] the string "csv_001_01" if d=1 and h=1 and so on.

This csv_001_01, csv_001_02,.. ; are variables that contains an integer value.

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"

Directly we could do this:

sMntHour[d,h] = csv_001_01.ToString(); // d is day and h is hour
sMntHour[d,h] = csv_001_02.ToString();

As we put the value of this concatenated variable in the array and not the name of the variables?

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)
  }
}    

Upvotes: 2

Views: 97

Answers (1)

Selman Gen&#231;
Selman Gen&#231;

Reputation: 101701

If I understand what you mean, you have all the variable names and now you want to get their values.

You could do this using Reflection and you can create a dictionary where keys are the variable names and the values are the actual values. It is really hard to help without seeing how these variables are declared, are they fields / properties ? are the private, static ? etc... But something like this should work, in theory:

var type = this.GetType();
var values = sMntHour.OfType<string>()
                     .ToDictionary(
                           x => x, 
                           x => (int)type.GetField(x).GetValue(this));

Then you can access the values using values["variable_name"]

Or if you don't want this, instead if you want to access them using index like [d,h] as mentioned in comments, do not store the variable names in the first place instead store the values in your array:

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);
  }
}    

Ofcourse you need to change the type of sMntHour, in order to make it work.

Upvotes: 2

Related Questions