asp.net 如何使用foreach循环获取字符串数组项值?

jslywgbw  于 2022-11-19  发布在  .NET
关注(0)|答案(3)|浏览(227)

代码如下:

string[] wordsX ={"word1", "word2","word3"}

与foreach循环一起使用,希望获取项值并传递给标签

foreach (string w in wordsX)

            {

                Label1.Text = w[1].ToString();
                Label2.Text = w[2].ToString();

            }

它给出错误:索引超出数组的界限。

ht4b089n

ht4b089n1#

您面临的问题是,您希望使用wordX元素的值设置标签的值
在你写一些额外的if语句和开关之前。你可以使用一些聪明的linq。诀窍是,创建一个数组这些标签,你可以压缩它们
大概是这样的:

public static void Main()
{
    // the words
    string[] wordsX ={"word1", "word2","word3"};
    // the labels as array
    Label[] labels = {Label1, Label2};
    
    // zip them together into a new anonymous class
    // (use the shortest collection)
    var combined = wordsX.Zip(labels, (w, l) => new { Word = w, Label = l});
    
    // display them with foreach.
    foreach (var item in combined)
    {
        // assign the label.Text to the word
        item.Label.Text = item.Word;
    }
}

明细:

// first collection
var combined = wordsX                
                   // second collection
                   .Zip(labels,      
                       // function to return new instance (class with no name)
                       (w, l) => new { Word = w, Label = l});
rdlzhqv9

rdlzhqv92#

你需要通过运行时字符串而不是编译时符号来访问标签。为此你可以使用Controls.Find

string[] wordsX ={"word1", "word2","word3"};
for (int i=0; i< wordsX.Length; i++)
{
    var controlId = string.Format("Label{0}", i);
    var control = this.Control.Find(controlId).OfType<Label>().FirstOrDefault();
    if (control != null) control.Text = wordsX[i];
}
ar7v8xwq

ar7v8xwq3#

像所有问题一样,我们不知道是否只有3个值,或者说1 '到15个值(页面上的标签)。
更糟糕的是为什么要使用循环和必须键入标签名称-甚至到数组中?(挫败了使用循环的全部目的!)。
因此,让我们假设一个列表,比如说1到10个项目,并且因此:

Lable1
 Lable2
 ... to 10, or 20, or 5 or 50!!!!

好的,我们不仅需要处理传递一个列表,比如说只有5个值,我们还必须清空那些没有值的值(或者这里有人想到过吗????)
因此,您可以这样做:

List<string> Mylist = new List<string> { "one", "Two", "Three", "Four" };

        for (int i = 1; i <= 10; i++)
        {
            Label MyLabel = Page.FindControl("Label" + i) as Label;
            if (i <= Mylist.Count)
                MyLabel.Text = Mylist[i-1];
            else
                MyLabel.Text = "";
        }

上面假设我们有label 1到label 10,但它将为5或50或任何你有多少工作。

相关问题