在C#中动态创建变量

时间:2012-05-30 08:59:05

标签: c# visual-studio visual-studio-2008

我正在尝试做这样的事情:

for (int i = 1; i < nCounter ; i++)
{
    string dvName = "dv" + i.ToString();
    System.Windows.Forms.DataGridView dvName = new DataGridView();
    // other operations will go here..
}

您可以猜到,我要做的是i == 1,创建一个名为DataGridView的{​​{1}},并在dv1创建{{1}名字为i == 2的名字,但我不能。

Visual Studio squiggles说 “一个名为dvName的局部变量已在此范围内被推迟” 我也尝试了以下内容:

DataGridView

但是VS再次摇摆不定,我希望你能理解我想要完成的事情。任何人都可以建议我怎么做?

3 个答案:

答案 0 :(得分:1)

你真正需要的是Dictionary<int, DataGridView> grids。在for循环(grids[i] = new DataGridView();)中填充它,然后使用所需的网格(grids[someCalculatedIndex]

希望这有帮助。

答案 1 :(得分:1)

尝试一个数据结构,您可以在其中保存变量,例如dict等

 System.Collections.Generic.Dictionary<string,System.Windows.Forms.DataGridView>
          grids = new Dictionary<string,System.Windows.Forms.DataGridView>();

for (int i = 1; i <nCounter ; i++)
{
    grids.Add("dv" + i.ToString(), new DataGridView());            
}

// to work on grid 1
DataGridView grid1 = grids["dv1"];
// so on

答案 2 :(得分:0)

所以你试图动态创建变量名?那是不可能的。为什么不使用数组或列表(甚至是词典)?或者您只想设置控件的名称?

var list = new List<DataGridView>();

for (int i = 1; i <nCounter ; i++)
{
    System.Windows.Forms.DataGridView dvName = new DataGridView();
    dvName.Name = "dv" + i.ToString();
    list.Add(dvName);
    // other operations will go here..
}

foreach (var dv in list)
{    
    ...do something... 
}

DataGridView secondDv = list.Single(dv=>dv.Name == "dv2");
secondDv.DoSomething()

不清楚是否想要做...