我有一个Dictionary<string, bool>其中的键-控件的ID和值-要设置的可见状态:

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


某些控件可以是null,即dic.ToDictionary(k => this.FindControl(k), v => v)将不起作用,因为key不能为null。

我可以下一步:

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


但这会为每个键两次调用FindControl()

如何避免重复搜索并仅选择存在适当控件的那些键?

就像是:

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


但是使用LINQ。

最佳答案

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; });

关于c# - 避免在LINQ查询中进行双重控制搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3105399/

10-11 20:05