将foreach循环转换为Linq表达式
本文关键字:Linq 表达式 转换 foreach 循环 | 更新日期: 2023-09-27 18:16:00
如何将以下foreach循环转换为linq等效?还有foreach循环或linq性能更好吗?这里的物品数量有限,可能只有100件。提前谢谢。
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也使用循环,所以不会有明显的性能差异。