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