最近,我被Concat的(在我看来太常用)叮咬了,返回的是结果,而不是附加到列表本身。

例如。

List<Control> mylist=new List<Control>;
//.... after adding Controls into mylist
MyPanel.Controls.Concat(mylist); //This will not affect MyPanel.Controls at all.

MyPanel.Controls=MyPanel.Controls.Concat(mylist); //This is what is needed, but the Controls reference can not be reassigned (for good reason)


那么,还有其他方法来组合两个列表,这些列表在集合引用为只读时将起作用吗?

用foreach做到这一点的唯一方法是吗?

foreach(var item in mylist){
  MyPanel.Controls.Add(item);
}


没有foreach的更好方法吗?

最佳答案

许多集合都有一个AddRange方法winforms ControlCollection is one of them

MyPanel.Controls.AddRange(mylist.ToArray());


这样做的好处是告诉容器您将立即添加许多控件,因此它可能会延迟布局步骤,直到完成添加所有控件为止。

关于c# - IEnumerable <T> .Concat —是否可以在不更改引用的情况下进行替换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2531458/

10-12 17:12