如何将以下foreach循环转换为linq等效项?
另外foreach循环或linq表现更好吗?此处的项目数仅受限制,可能在100s之内。提前致谢。

ObservableCollection<ListItem> _ListItems = null;
string[] listItems = ListValueString.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

foreach (var lstItem in listItems)
{
    var itm = new ListItem();
    string[] listTexts = lstItem.Split(':');

    itm.ListText = listTexts[0];
    itm.ListId = Int32.Parse(listTexts[1]);
    itm.IsActive = true;

    if (_defaultString == Int32.Parse(listTexts[1]))
    {
        itm.IsInUse = true;
    }
    _ListItems.Add(itm);
}

最佳答案

您可以使用以下使用匿名类型的查询来存储中间结果:

List<ListItem> items = ListValueString.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(lstItem => new { lstItem, listTexts = lstItem.Split(':') })
    .Select(x => new ListItem()
    {
        ListText = x.listTexts[0],
        ListId = Int32.Parse(x.listTexts[1]),
        IsActive = true,
        IsInUse = Int32.Parse(x.listTexts[1]) == _defaultString
    })
    .ToList();
var _ListItems = new ObservableCollection<ListItem>(items);


LINQ还使用循环,因此不会有明显的性能差异。

关于c# - 将foreach循环转换为Linq表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32951239/

10-13 06:28