簡體   English   中英

在變量名稱中連接變量

[英]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.Controlspage1.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM