首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ -将静态文本添加到每个结果

LINQ -将静态文本添加到每个结果
EN

Stack Overflow用户
提问于 2010-11-04 10:49:56
回答 2查看 1.1K关注 0票数 4

我有一个文件数组,但问题是根路径没有附加到文件,所以使用下面的数据,我应该如何将linq项附加到静态字符串?

代码语言:javascript
运行
复制
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)的列表;我试过了,但没有成功:

代码语言:javascript
运行
复制
var fileList = (from x in files
               select Path.Combine(rootPath, x)).ToList();

但是它没有附加rootPath,fileList和文件列表是一样的。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2010-11-04 10:51:38

显然,如果第二个参数有一个前导"\“,Path.Combine将忽略第一个参数(这个blog entry有更多信息)。

这应该是可行的,它使用Path.Combine? operator来说明第二个参数中的前导斜杠:

代码语言:javascript
运行
复制
var fileList = (from f in files 
                select Path.Combine(rootPath, 
                f.StartsWith("\\") ? f.Substring(1) : f)).ToList();
票数 4
EN

Stack Overflow用户

发布于 2010-11-04 11:19:16

如果更改,则查询可以正常工作

"\\My Documents\\File1.txt" to @"My Documents\\File1.txt"

在Donut提到的帖子中描述了原因。

因此,

代码语言:javascript
运行
复制
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

例如:

代码语言:javascript
运行
复制
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));

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4093498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档