只要兩個字符串總是在相同的格式,在你的榜樣,這應該工作:
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