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

C# 对字符串数组集合执行操作,c#,arrays,linq,C#,Arrays,Linq,我正在读取一个包含以下行的文件 pathName; additionalString; maybeSomeNumbers 我用英语读它 var lines = File.ReadAllLines(fileListFile); var fileListEntries = from line in lines where !line.StartsWith("#") select line.Split(';').

我正在读取一个包含以下行的文件

pathName; additionalString; maybeSomeNumbers
我用英语读它

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

到目前为止,这种方法效果良好。但是,我想更改
路径名
中的驱动器号。我可以将
fileListEntries
转换为数组并在元素之间循环
[I][0]
,但是有没有一种方法可以直接对集合执行此操作?

您可以在select中调用一个方法,以您希望的方式修改文本

        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;
        }

我想你可以用LINQ来做

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

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();

使用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();

驱动器总是一个字母吗?或者它可能是一个网络位置,如
\\computername
?@evall:要替换的字符串是一个驱动器号,我替换的字符串可能是其他字符串<代码>字符串。将
与子字符串组合使用可以在此处正常工作。但是,我想知道如何在项目的孔列表上执行此操作。非常感谢您显示/解释LINQ扩展!
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();