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

Tom*_*len 1 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);
}
Run Code Online (Sandbox Code Playgroud)

它调用一个返回ChangeLogTypes数组的函数,然后将每个函数添加到列表控件中.有更优雅的方式吗?我觉得我每次做这个或类似的东西都会重复代码.

Jon*_*eet 5

是的,LINQ to Objects是你的朋友:

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

Select部分将每个投影ChangeLogType到a ListItem,ToList()并将得到的序列转换为a List<ListItem>.

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

非常值得学习更多关于LINQ的信息,特别是LINQ to Objects - 它可以使这类事情变得更加简单.