При условии, что две строки всегда имеют тот же формат, что и в вашем примере, это должно работать:
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"
.
Обратите внимание, что этот алгоритм по существу создает все возможные комбинации двух путей и не особенно эффективен.