I'm surprised there's not an overload that can take a string array. Anyway, what is the best way to avoid nesting calls to Path.Combine?
pathValue = Path.Combine(path1, Path.Combine(path2, Path.Combine(path3, path4)))
This seems inefficient since it results in four new strings being created just to get one.
If you already have an array or an IEnumerable<T> then you could do this in one line...
// I'm assuming that you've got an array or IEnumerable<T> from somewhere var paths = new string[] { path1, path2, path3, path4, path5, path6 }; string result = paths.Aggregate(Path.Combine);
If not, then write your own extension method to string...
public static class PathExtension { public static string CombinePathWith(this string path1, string path2) { return Path.Combine(path1, path2); } }
... that would allow you to chain these like this...
string result = path1.CombinePathWith(path2) .CombinePathWith(path3) .CombinePathWith(path4) .CombinePathWith(path5) .CombinePathWith(path6);
The efficiency side of things isn't the problem IMO - it's the usability side of things. Personally I think there ought to be an overload of:
Combine(string first, string second, string third, params string[] others)
You need to have at least three to prevent it from clashing with the existing two-parameter version if you just write Path.Combine("foo", "bar")
but it would certainly help to make code clearer. Why not open a feature request on Connect?
Of course, you can implement this yourself (and in another class the number of parameters doesn't matter so much):
public static string CombinePaths(string first, params string[] others) { // Put error checking in here :) string path = first; foreach (string section in others) { path = Path.Combine(path, section); } return path; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With