只要两个字符串总是在相同的格式,在你的榜样,这应该工作:
string path1 = "/System/Configuration/Panels/Alpha";
string path2 = "Panels/Alpha/Data";
var x = path1.Split('/');
var y = path2.Split('/');
string result = Enumerable.Range(0, x.Count())
.Where(i => x.Skip(i)
.SequenceEqual(y.Take(x.Skip(i)
.Count())))
.Select(i => string.Join("/", x.Take(i)
.Concat(y)))
.LastOrDefault();
// result == "/System/Configuration/Panels/Alpha/Data"
对于path1 = "/System/a/b/a/b"
和path2 = "a/b/a/b/c"
结果是"/System/a/b/a/b/a/b/c"
。您可以更改LastOrDefault至FirstOrDefault代替"/System/a/b/a/b/c"
。
请注意,该算法基本上创建了两个路径的所有可能的组合,并不是特别有效。
来源
2010-04-28 16:45:01
dtb
这有什么错Path.Combine? – 2010-04-28 16:36:18
@Kyle Alons:@loannis希望Combine方法能够识别路径的共享片段并适当地“合并”它们。 – 2010-04-28 16:38:12
Path.Combine将返回“/系统/配置/面板/ Alpha /数据/面板/ Alpha /数据” – Ioannis 2010-04-28 16:39:34