在 C# 中动态创建变量

本文关键字:创建 变量 动态 | 更新日期: 2023-09-27 18:35:56

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

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,创建一个名称为dv1DataGridView,在i == 2,创建一个名称为dv2DataGridView,但我不能。

Visual Studio 波浪线说"一个名为 dvName 的局部变量已经在此范围内被破坏了"我还尝试了以下方法:

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

但是VS再次弯曲,我希望你明白我想要完成什么。谁能建议我该怎么做?

在 C# 中动态创建变量

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

希望这有帮助。

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

 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

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

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

不清楚你想做什么...