使用LINQ在列表的所有元素上应用谓词

时间:2014-05-08 12:33:05

标签: c# linq

我想通过在每个元素上应用谓词函数来更新列表。

这里是我如何在不使用LINQ的情况下完成的:

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

如何使用LINQ做到这一点?

1 个答案:

答案 0 :(得分:6)

如果你需要的是从每个fileName的开头删除一些字符,你可以使用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('/', '\\');
}
相关问题