我正在寻找此代码中的一些方向。
我所拥有的是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等的值
我想做的是:
上面的大胆步骤是我无法完成的 - 有人可以指导我吗?
// 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的例子,我可以在上面的例子中使用它 - 因此这个帖子。
-------编辑添加解释差异------
此编辑说明我的问题与可能的副本有何不同:
这个问题是关于访问值 - 在这种情况下已经加载了值。
我的问题是加载一个值 - 加载值是我想要完成的。
如果我的解释合理,你可以取消投票吗?谢谢!
答案 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));
}
}
}