对字符串数组集合执行操作

时间:2014-03-06 14:58:18

标签: c# arrays linq

我正在阅读包含

等行的文件
pathName; additionalString; maybeSomeNumbers

我用

阅读
var lines = File.ReadAllLines(fileListFile);
var fileListEntries = from line in lines
                      where !line.StartsWith("#")
                      select line.Split(';').ToArray();

到目前为止效果很好。但是,我想更改pathName中的驱动器号。我可以将fileListEntries转换为数组并循环遍历元素[i][0],但有没有办法可以直接对集合执行此操作?

4 个答案:

答案 0 :(得分:1)

我认为你可以使用LINQ进行内联。

File.ReadAllLines()返回一个字符串数组,因此您应该能够从集合中Replace()执行line

var replace = "The string to replace the drive letter";
var lines = File.ReadAllLines(fileListFile);
var fileListEntries = from line in lines
                      where !line.StartsWith("#")
                      select (line.Replace(line[0], replace).Split(';')).ToArray();

答案 1 :(得分:1)

使用LINQ扩展方法语法,以便能够在lambda表达式中使用代码块{ ... }。如果您这样做,则必须包含明确的return - 声明。

var fileListEntries = lines
    .Where(l => !l.StartsWith("#"))
    .Select(l => {
        string[] columns = l.Split(';');
        if (Path.IsPathRooted(column[0])) {
            string root = Path.GetPathRoot(columns[0]);
            columns[0] = Path.Combine(@"X:\", columns[0].Substring(root.Length));
        }
        return columns;
    })
    .ToArray();

答案 2 :(得分:0)

你可以在你的选择中调用一个方法,以你想要的方式修改文本。

        static void Main(string[] args)
        {
            var fileListEntries = from line in lines
                                  where !(line.StartsWith("#"))
                                  select ( ModifyString(line));

        }

        private static string[] ModifyString(string line)
        {
            string[] elements = line.Split(';');
            elements[0] = "modifiedString";
            return elements;
        }

答案 3 :(得分:0)

lines.Where(l => !l.StartsWith("#").
      Select(l => string.Concat(driveLetter, l.Substring(1))).
      Select(l => l.Split(';');