为存储在另一个变量中的变量赋值

时间:2017-07-04 02:23:27

标签: c#

我正在寻找此代码中的一些方向。

我所拥有的是2个变量:

1)CalcTimeDown - for循环中的一个字符串变量,它接受与for循环中每个值的另一个字符串变量相对应的各种值

初始值是一个字符串 - " CalculationTimeDown"。这后缀为000,001,002和003以及004,给出了CalculationTimeDown000,CalculationTimeDown001,CalculationTimeDown002..etc

2)CalculationTimeDown000,CalculationTimeDown001,CalculationTimeDown002..etc是" id"在XML布局中。并且应该获得00:00,00:30,01:00等的值

我想做的是:

  1. for循环中循环从0到4。
  2. 将值CalcTimeDown的值设置为CalculationTimeDown000, CalculationTimeDown001,.....等。
  3. 使用" 00:00"
  4. 加载变量CalculationTimeDown000
  5. 使用" 00:30"
  6. 加载变量CalculationTimeDown001
  7. 使用" 01:00"
  8. 加载变量CalculationTimeDown002
  9. 使用" 00:30"
  10. 加载变量CalculationTimeDown003
  11. 使用" 02:00"
  12. 加载变量CalculationTimeDown004

    上面的大胆步骤是我无法完成的 - 有人可以指导我吗?

            // Assemble the variable name 
            this.CalcTimeDownInitial = "CalculationTimeDown";
    
            for (int i = 0; i <= 4; i++)
            {
                // Assemble the variable name 
                this.CalcTimeDown = this.CalcTimeDownInitial + i.ToString("000");
    
                var TimeSlotVariable = new StringtoVariable(CalcTimeDown);
    
                this.iSlot = (i) * 30;
                //
    
                // Get the time to be pumped
                DateTime TimeSlotValue = DateTime.Now.AddMinutes(this.iSlot);
                //
    
    
                // CalcTimeDown contains the variable name where I want to pump the value of TimeSlotValue
                // TimeSlotValue contains 00:00, 00:30, 01:00 etc.
    

    //不正确的语法 - 请帮忙。

                TimeSlotVariable = TimeSlotValue;
    

    提前谢谢。

    乌塔姆

    PS:我找不到一个使用Reflection的例子,我可以在上面的例子中使用它 - 因此这个帖子。

    -------编辑添加解释差异------

    此编辑说明我的问题与可能的副本有何不同:

    这个问题是关于访问值 - 在这种情况下已经加载了值。

    我的问题是加载一个值 - 加载值是我想要完成的。

    如果我的解释合理,你可以取消投票吗?谢谢!

3 个答案:

答案 0 :(得分:1)

创建变量名称以存储值是没有意义的 - 如果你甚至可以在C#中使用这样的东西。我见过其他人试图做同样的事情,但他们通常需要的只是一个集合。

将每个值存储在List<T>中,其中T只是数据的类型。

var timeSlotValues = new List<DateTime>();

for (int i = 0; i <= 4; i++)
{
    timeSlotValues.Add(DateTime.Now.AddMinutes(i * 30));
}

我假设您最终会在下拉菜单中使用它 - 您只需将列表指定给控件作为其数据源。

因为我是LINQ爱好者,所以我会将其作为替代解决方案:

var timeSlotValues = Enumerable.Range(0,5)
                               .Select(i => DateTime.Now.AddMinutes(i * 30))
                               .ToList();

答案 1 :(得分:0)

尝试使用字典来保存键,值对,如下所示:

        string varname = "CalculationTimeDown";

        Dictionary<string, DateTime> values = new Dictionary<string, DateTime>();
        for (int i = 0; i <= 4; i++)
        {
            // Assemble the variable name 
            values.Add(varname + i.ToString("000"), DateTime.Now.AddMinutes((i) * 30));

        }

答案 2 :(得分:0)

在c#中无法动态创建变量,因为它是强类型语言。在这种情况下你可以使用字典。

class Program
{
    static void Main(string[] args)
    {
        Dictionary<string, DateTime> variables = new Dictionary<string,     DateTime>();
        for (int i = 0; i <= 4; i++) {
            variables.Add(String.Format("CalculationTimeDown{0}", i.ToString("000")), DateTime.Now.AddMinutes(i * 30));
        }
    }
}