避免 LINQ 查询中的双重控制搜索
我有一个 Dictionary
其中键 - 控件的 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。
I have a Dictionary<string, bool>
where key - control's ID and value - it's visible status to set:
var dic = new Dictionary<string, bool>
{
{ "rowFoo", true},
{ "rowBar", false },
...
};
Some of controls can be null
, i.e. dic.ToDictionary(k => this.FindControl(k), v => v)
will not work because key can't be null.
I can do next:
dic
.Where(p => this.FindControl(p.Key) != null)
.ForEach(p => this.FindControl(p.Key).Visible = p.Value); // my own extension method
but this will call FindControl()
twice for each key.
How to avoid double search and select only those keys for which appropriate control exists?
Something like:
var c= FindControl(p.Key);
if (c!= null)
return c;
but using LINQ.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
...但我只是将
foreach
与if
语句一起使用。不要过度使用 LINQ。... but I'd simply use
foreach
with anif
statement. Don't overuse LINQ.看,没有匿名实例(不过也好不了多少,新建组并枚举两次)
Look, no anonymous instances (hardly better though, newing-up groups and enumerating twice)
与 David 的想法相同,但在 一个 字符串中:
The same idea then David's but in one string: