0

次のように、ASP.NET アプリでメニュー アプリケーションを作成します。

// HTML
<td runat="server" id="container">

// C#. This logic is creating
// within a LOOP
Label l = new Label("name_blabla");
Panel p = new Panel();
p.Add(l);
container.Controls.Add(p);

特定の瞬間に、CSS クラスmyclassをラベルに割り当てlます。

l.CssClass="myClass";

myclassしたがって、コンテナには、この名前が割り当てられたラベルを 1 つだけ含むパネルが 1 つだけあります。

目的は、すべてのコントロールが挿入されたら、コンテナーからこのパネルを取得することです。挿入位置がわかりません。LINQ を使用するとより効果的です。

4

1 に答える 1

1

を使用OfType<>()してパネルをフィルタリングし、SelectMany()を適用してパネル内にラベルを投影し、次にWhere()を適用してラベルの CSS クラスを確認できます。

Label theLabel
    = container.Controls.OfType<Panel>()
                        .SelectMany(panel => panel.Controls.OfType<Label>())
                        .Where(label => label.CssClass == "MyClass")
                        .FirstOrDefault();

編集:ラベルの代わりにパネルを一致させたい場合は、Any()を使用できます:

Panel thePanel
    = container.Controls.OfType<Panel>()
                        .Where(panel => panel.Controls.OfType<Label>().Any(
                            label => label.CssClass == "MyClass"))
                        .FirstOrDefault();
于 2012-12-27T09:37:36.993 に答える