我有一个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/