我正在努力重构一些代码来练习LINQ。出于某种原因,我无法让这段代码合作。
//ActionControls is a ControlCollection
var actionControls = flowLayoutPanel1.FilterControls(c => c is Button);
//TODO: Optimize
foreach(var control in actionControls)
{
control.Visible = workingItemDataTable.AsEnumerable().Any(row => "btn" + row.Field<string>("Name") == control.Name);
}
我现在想做什么。
flowLayoutPanel1.FilterControls(c => c is Button && c.Name == "btnTaskInfo"//btnTaskInfo is always visible
|| workingItemDataTable.AsEnumerable().Any(row => "btn" + row.Field<string>("Name") == c.Name)).Cast<Button>()
但是在将其作为按钮转换后,我无法弄清楚如何设置visible = false。任何建议?
答案 0 :(得分:0)
你仍然需要迭代控件,但你可以这样做,假设FilterControls不仅仅是Where的别名:
var actionControls = flowLayoutPanel1.OfType<Button>();
在lambda表达式中迭代和执行集合有一些“技巧”和快捷方式,但它使代码看起来很乱,而且它们大多只是黑客攻击。您可以创建自己的扩展名ForEach(如果您真的想要这样做,则无法使用它)。
flowLayoutPanel1.OfType<Button>().ForEach(btn=>{btn.Visible= ... });