我有一个文件数组,但问题是根路径没有附加到文件,所以使用下面的数据,我应该如何将linq项附加到静态字符串?
string rootPath = "C:\\Users\\MyUserName";
List<string> files = new List<string>();
files.Add("\\My Documents\\File1.txt");
files.Add("\\My Documents\\File2.txt");
我本质上想要一个Path.Combine(rootPath,x)的列表;我试过了,但没有成功:
var fileList = (from x in files
select Path.Combine(rootPath, x)).ToList();
但是它没有附加rootPath,fileList和文件列表是一样的。
有什么想法吗?
发布于 2010-11-04 02:51:38
显然,如果第二个参数有一个前导"\
“,Path.Combine
将忽略第一个参数(这个blog entry有更多信息)。
这应该是可行的,它使用Path.Combine
和?
operator来说明第二个参数中的前导斜杠:
var fileList = (from f in files
select Path.Combine(rootPath,
f.StartsWith("\\") ? f.Substring(1) : f)).ToList();
发布于 2010-11-04 03:19:16
如果更改,则查询可以正常工作
"\\My Documents\\File1.txt" to @"My Documents\\File1.txt"
。
在Donut提到的帖子中描述了原因。
因此,
string rootPath = "C:\\Users\\MyUserName";
List<string> files = new List<string>();
files.Add(@"My Documents\\File1.txt");
files.Add(@"My Documents\\File2.txt");
var fileList = (from x in files select Path.Combine(rootPath, x)).ToList();
OR
var fileList = files.Select(i => Path.Combine(rootPath, i));
工作正常。
如果您根本不想更改现有的源代码,那么使用string.Concat代替Path.Combine
例如:
string rootPath = "C:\\Users\\MyUserName";
List<string> files = new List<string>();
files.Add("\\My Documents\\File1.txt");
files.Add("\\My Documents\\File2.txt");
var fileList = (from x in files select string.Concat(rootPath, x)).ToList();
OR
var fileList = files.Select(i => string.Concat(rootPath, i));
希望这能有所帮助
https://stackoverflow.com/questions/4093498
复制相似问题