c# 将数组分配给列表的更优雅的方法?

标签 c# asp.net listcontrol

我有这个:

// Load changelog types
ChangeLogType[] Types = ChangeLogFunctions.GetAllChangelogTypes();
foreach(ChangeLogType Rec in Types){
    ListItem N = new ListItem();
    N.Text = Rec.Type;
    N.Value = Rec.ID.ToString();
    LstChangeLogType.Items.Add(N);
}

它调用一个返回 ChangeLogTypes 数组的函数,然后将每个类型添加到列表控件中。有没有更优雅的方式来做到这一点?我觉得每次执行此操作或类似操作时我都在重复代码。

最佳答案

是的,LINQ to Objects 是您的 friend :

var changeLogTypes = ChangeLogFunctions.GetAllChangelogTypes()
                                       .Select(x => new ListItem { 
                                                      Text = x.Type,
                                                      Value = x.ID.ToString() })
                                       .ToList();

Select部分投影每个 ChangeLogTypeListItem , 和 ToList()将结果序列转换为 List<ListItem> .

这是假设您真的想要一个包含所有这些条目的 列表。如果您需要将结果添加到现有 列表,您可以在没有 ToList 的情况下执行此操作打电话,但调用AddRange在现有列表中,结果为 Select打电话。

学习更多关于 LINQ 的知识,特别是 LINQ to Objects 是非常值得的 - 它可以使诸如此类的各种事情变得更加简单。

关于c# 将数组分配给列表的更优雅的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6335061/

相关文章:

c# - MVC 中的异步/等待 - 为什么在长时间运行的操作期间释放线程很重要

c# - 如何在html表格中添加复选框?

python - 如何使用 mechanize (python) 在 global_form ListControl 元素中进行选择?

c# - 可恢复文件下载问题 -> 当文件大小超过 Int32.MaxValue(2GB)(大文件)时

c++ - wxWidgets 上下文菜单/弹出窗口

c# - 如何仅在需要时才在 .NET WebBrowser 控件上显示垂直滚动条?

c# - EF core 在 ASP.net core 多层架构中添加迁移

c# - 在 Windows 应用商店应用程序中获取 CoreDispatcher 的正确方法

ASP.NET MVC 2 System.Web.Mvc.dll 冲突