1

Dictionary<string, bool>whereキー(コントロールのIDと値)があります。設定するステータスは表示されています。

var dic = new Dictionary<string, bool>
{
    { "rowFoo", true},
    { "rowBar", false },
    ...
};

一部のコントロールは可能ですnull。つまりdic.ToDictionary(k => this.FindControl(k), v => v)、キーをnullにすることはできないため、機能しません。

次にできること:

dic
    .Where(p => this.FindControl(p.Key) != null)
    .ForEach(p => this.FindControl(p.Key).Visible = p.Value); // my own extension method

ただし、これFindControl()により、キーごとに2回呼び出されます。

二重検索を回避し、適切な制御が存在するキーのみを選択するにはどうすればよいですか?

何かのようなもの:

var c= FindControl(p.Key);
if (c!= null)
    return c;

ただし、LINQを使用します。

4

4 に答える 4

3
dic.Select(p => new { Control = this.FindControl(p.Key), p.Value })
   .Where(p => p.Control != null)
   .ForEach(p => p.Control.Visible = p.Value);

...しかし、私は単にステートメントで使用foreachします。ifLINQを使いすぎないでください。

于 2010-06-23T20:47:02.803 に答える
2
dic
 .Select(kvp => new { Control = this.FindControl(kvp.Key), Visible = kvp.Value })
 .Where(i => i.Control != null)
 .ToList()
 .ForEach(p => { p.Control.Visible = p.Visible; });
于 2010-06-23T20:47:58.870 に答える
1

ほら、匿名のインスタンスはありません(ただし、グループを新しくして2回列挙するのはほとんど良いことではありません)

IEnumerable<IGrouping<bool, Control>> visibleGroups = 
  from kvp in controlVisibleDictionary
  let c = this.FindControl(kvp.Key)
  where c != null
  group c by kvp.Value;

foreach(IGrouping<bool, Control> g in visibleGroups)
{
  foreach(Control c in g)
  {
    c.Visible = g.Key;
  }
}
  • 免責事項、foreachのように単純ではありません-if
于 2010-06-24T01:17:55.287 に答える
0

David と同じアイデアですが、1 つの文字列で:

(from p in new System.Collections.Generic.Dictionary<string, bool>
{
    { "rowAddress", value },
    { "rowTaxpayerID", !value },
    { "rowRegistrationReasonCode", !value },
    { "rowAccountID", !value },
    { "rowAccountIDForeign", value },
    { "rowBankAddress", value },
    { "rowBankID", !value },
    { "rowBankSwift", value },
    { "rowBankAccountID", !value }
}
let c = this.FindControl(p.Key)
where c != null
select new // pseudo KeyValuePair
{
    Key = c,
    Value = p.Value
}).ForEach(p => p.Key.Visible = p.Value); // using own ext. method
于 2010-06-24T09:49:07.167 に答える