[英]Concatenate variable in variable name
我在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。如果有任何錯誤,那么我會想要類似Id3CheckBox = false然后_id3 = 0的東西。如果使用語句而不是使用循環?
您可以使用循環並在循環內部執行類似的操作
CheckBox checkbox = (CheckBox )this.FindControl("_id" + x.toString());
if(checkbox.isChecked)
//do something here
然后,您可以從那里讀取值。
答案來自這里
您可以將復選框放入這樣的數組中:
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.Controls
或page1.Controls
您將獲得它。
我最終使用了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++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.