变量名

时间:2015-05-15 22:28:33

标签: c# asp.net loops if-statement while-loop

我有一个ASP.NET(C#)中的变量列表,我试图循环而不编写几十个If语句。我希望做的只是用变量引用每个变量并将其附加到变量名称。如下所示:

string _id1 = Id1CheckBox.Checke.ToString();
string _id2 = Id2CheckBox.Checke.ToString();
string _id3 = Id3CheckBox.Checke.ToString();

int x = 1;

while (x < 20)
{
    if ("_id&" + x == "True")
    {
        _id + x = x.ToString();
    }
    else
    {
        _id + x = 0;
    }
    x++;
}

我尝试做的背后的逻辑是我在表单上有几个复选框,Id1CheckBox,Id2CheckBox,Id3CheckBox等。我需要将这些值作为字符串获取,以便我可以将它们作为参数传递给SQL查询。所以基本上如果Id1CheckBox = true然后_id1 = 1.如果Id2CheckBox = true然后_id2 = 2.如果任何是假,那么我想要像If Id3CheckBox = false然后_id3 = 0这样可能或者我只需要写几个如果语句而不是使用循环?

3 个答案:

答案 0 :(得分:0)

你可以使用循环并在循环中执行类似的操作

CheckBox checkbox = (CheckBox )this.FindControl("_id" + x.toString()); 

if(checkbox.isChecked) 
  //do something here 

然后你可以从那里读取值。

答案来自here

答案 1 :(得分:0)

您可以将复选框放入如下数组中:

private bool[] _checked;

public Form1() // Constructor
{
    InitializeComponent();
    _checked = Controls
        .OfType<CheckBox>()
        .Where(cb => cb.Name.StartsWith("Id"))
        .OrderBy(cb => cb.Name)
        .Select(cb => cb.Checked)
        .ToArray();
}

然后像这样循环数组:

for (int i = 0; i < _checked.Length; i++) {
    if (_checked[i]) {
        ...
    } else {
        ...
    }
}

注意:数组是编号变量的列表(可以这么说)。我们说数组是索引的。索引范围从0到数组的长度 - 1。

如果您有20个复选框,则将前导零添加到最多为9的名称。例如"Id05CheckBox"。否则,复选框将无法正确排序。

另请注意,表单的Controls集合仅包含直接在表单上的控件。如果ckeckbox位于面板或标签页等上,则循环遍历此容器控件的Controls集合:panel1.Controlspage1.Controls - 您就可以获得它。

答案 2 :(得分:0)

我最终使用Dictionary并在foreach循环中添加参数,而不是尝试组合变量。下面是代码:

Dictionary<string, string> dictionary = new Dictionary<string, string>();

dictionary.Add("ID1", _id1);
dictionary.Add("ID2", _id2);
dictionary.Add("ID3", _id3);
dictionary.Add("ID4", _id4);

int i = 1;

foreach (var pair in dictionary)
{
    if (pair.Value == "True")
    {
        cmd.Parameters.AddWithValue(pair.Key, i.ToString());
    }
    else
    {
        cmd.Parameters.AddWithValue(pair.Key, "0");
    }
    i++;
}