我想通过对每个元素应用谓词功能来更新列表。

这是我不使用LINQ的方式:

for(int i = 0; i < filesToCheck.Count; i++)
{
    while (filesToCheck[i][0] == '/' || filesToCheck[i][0] == '\\')
        filesToCheck[i] = filesToCheck[i].Substring(1);
}


如何使用LINQ做到这一点?

最佳答案

如果只需要从每个文件名的开头删除一些字符,则可以使用TrimStart,然后:

var list = filesToCheck.Select(f => f.TrimStart('/', '\\'));


编辑:您当然可以在不使用LINQ的情况下执行此操作,但是这里的主要问题是您的while循环,而不是for的使用:花了我几秒钟的时间来思考while循环以弄清楚它是什么做。这没有传达意图,我必须在头脑中执行它才能理解它。另外,您可以这样重写它:

for (int i = 0; i < filesToCheck.Count; i++)
{
    filesToCheck[i] = GetValueWithoutSlashes(filesToCheck[i]);
}


那么阅读此书的每个人都很清楚,并且还允许您将GetValueWithoutSlashes的实现更改为您想要的任何形式,例如

private string GetValueWithoutSlashes(string value)
{
    return value.TrimStart('/', '\\');
}

10-05 22:31