Search code examples
.netstringpathioconcatenation

How can Path.Combine be used with more than two arguments?


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.


Solution

  • 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;
    }