C# 如何使用LINQ而不是foreach循环?

C# 如何使用LINQ而不是foreach循环?,c#,linq,foreach,C#,Linq,Foreach,我想将foreach循环转换为linq查询,因为itemList可以有很多值,并且迭代该列表中的每个值非常耗时。linq可以用来实现这一点吗 string fileAsString = File.ReadAllText(filePath); Match match = Regex.Match(filePath, regx.ToString()); while (match.Success) { string itemToReplace = match.Groups["part"].Va

我想将foreach循环转换为linq查询,因为itemList可以有很多值,并且迭代该列表中的每个值非常耗时。linq可以用来实现这一点吗

string fileAsString = File.ReadAllText(filePath);
Match match = Regex.Match(filePath, regx.ToString());

while (match.Success)
{
    string itemToReplace = match.Groups["part"].Value;

    //Use linq instead of the commented out area
    //
    //foreach (var item in itemList)
    //{
    //    if (itemToReplace == macro.Name)
    //    {
    //        fileAsString = fileAsString.Replace(match.Value, item.Value);
    //    }
    //}
    //

    match = match.NextMatch();
}
aka对[0..len中的n执行r{n+1}=fr_n,x_n,并计算为r{n+1}

在更换操作1上进行折叠

如果使用Regex.Matches,也可以在外循环上应用聚合。但是,使用LINQ不会改变时间复杂度或使代码运行更快-Replace的调用次数相同

[注意:我再次查看了代码,不明白为什么会重复替换;以下可能不适用。要替换的参数是否应该是另一种方式?]

如果性能是一个问题,那么最好使用正则表达式来处理文件替换。也就是说,创建一个与所有项匹配的模式,尽可能少-可以具体到a | b | c或更一般。然后在匹配电梯内使用字典来查找替换值


1条件检查可以移动到内部循环之外,因为表达式在循环期间是固定的。虽然这不会影响运行时间,但我已经这样做了[出于优先考虑和]因为它使LINQ稍微简单一些。

LINQ并没有摆脱循环。是什么让你认为LINQ会导致更快的执行?LINQ不会更快fileAsString从哪里来?LINQ不是魔法。如果你有很多替换要执行,那将需要时间。仅仅让你的代码使用LINQ不会让这些替换发生任何变化更快。
fileAsString = itemList.Aggregate(fileAsString,
    (acc, item) => acc.Replace(match.Value, item.Value));