当前位置:  开发笔记 > 编程语言 > 正文

将项目集合从列表框转换为通用列表

如何解决《将项目集合从列表框转换为通用列表》经验,为你挑选了2个好方法。

我想找到一种更好的方法来填充c#中的checkedlistbox中的通用列表.

我可以很容易地做到以下几点:

List selectedFields = new List();

foreach (object a in chkDFMFieldList.CheckedItems) {
         selectedFields.Add(a.ToString());
         } 

必须有一个更精细的方法将CheckedItems集合强制转换为我的列表.



1> Matt Hamilto..:

试试这个(使用System.Linq):

OfType() 是一种扩展方法,所以你需要使用 System.Linq

List selectedFields = new List();
selectedFields.AddRange(chkDFMFieldList.CheckedItems.OfType());

或者只是在一行中:

List selectedFields = chkDFMFieldList.CheckedItems.OfType().ToList();



2> nawfal..:

这不是您的要求的答案,而是发布更一般的答案.你可以用各种方式做到这一点:

1)

T[] items = new T[lb.Items.Count];
lb.Items.CopyTo(items, 0);
var lst = new List(items);

2)foreach如你所述循环和添加使用.

3)使用Linq

var lst = lb.Items.Cast().ToList();

4)或

var lst = lb.Items.OfType().ToList();

当我像下面那样进行一些性能测试时,我发现复制到数组方法最快,而Linq方法更慢.当然,在现实世界的场景中,这些并不重要.我更喜欢第三种方法(Linq)的可读性.

DateTime d = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
    Action();
}
MessageBox.Show((DateTime.Now - d).TotalMilliseconds.ToString());

对于10000次的迭代,在列表框中运行多次约300项,

1)~100ms

2)~150ms

3)~250ms

4)~260ms

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有