2015-05-15 129 views
0

我有一个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。这是可能的或将我只需要写几个如果语句而不是使用循环?

回答

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集合仅包含直接在窗体上的控件。如果cckckboxs位于面板或标签页或类似位置上,则通过此容器控件的Controls集合进行循环:panel1.Controlspage1.Controls - 即可获得。

+0

@Oliver我实际调用这一切都从一个单独的类,所以我不会越过复选框为复选框这个另一类,我只是路过的真或假的值作为类的字符串。 – aantiix

+0

@ doby48:我相应地改变了我的答案。将复选框存储在数组中的优点是可以反复访问它们,并且它们将始终显示它们的当前状态,因为数组只保存对它们的引用。因此,如果需要保留复选框数组并从其中获取布尔数组,可能是个好主意,如下所示:'bool [] checked = _checkBoxes.Select(cb => cb.Checked).ToArray();'。 –

0

你可以使用循环,这样做你的循环

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

if(checkbox.isChecked) 
    //do something here 

内然后,你可以从那里读出的值。

回答here

0

我结束了一个词典,并在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++; 
}