使用Path.Combine而不是使用'+'连接字符串有什么好处?

Sos*_*der 21 c# concatenation

我看不出有什么区别.

什么Path.Combine比完美的字符串连接更好?

我猜它在背景中做了非常相似的事情.

任何人都可以告诉我为什么它往往是首选?

Gyö*_*zeg 26

Path.Combine使用Path.PathSeparator和它检查第一个路径是否在末尾已经有一个分隔符,因此它不会复制分隔符.此外,它还会检查要组合的路径元素是否具有无效字符.


Son*_*nül 9

Path.Combine做更多的事情,而不仅仅是字符串连接.如果你看一下源代码 ;

  • 检查两个路径是否都有无效字符
  • 检查第二个参数是否是根路径
  • 检查第一个路径的最后一个字符是导演还是alt目录或音量分隔符.如果没有,则将两个字符串与目录分隔符连接起来


Cha*_*mal 5

这是实现

public static string Combine(string path1, string path2)
{
    if (path1 == null || path2 == null)
    {
        throw new ArgumentNullException((path1 == null) ? "path1" : "path2");
    }
    Path.CheckInvalidPathChars(path1, false);
    Path.CheckInvalidPathChars(path2, false);
    return Path.CombineNoChecks(path1, path2);
}

private static string CombineNoChecks(string path1, string path2)
{
    if (path2.Length == 0)
    {
        return path1;
    }
    if (path1.Length == 0)
    {
        return path2;
    }
    if (Path.IsPathRooted(path2))
    {
        return path2;
    }
    char c = path1[path1.Length - 1];
    if (c != Path.DirectorySeparatorChar && c != Path.AltDirectorySeparatorChar && c != Path.VolumeSeparatorChar)
    {
        return path1 + Path.DirectorySeparatorChar + path2;
    }
    return path1 + path2;
}
Run Code Online (Sandbox Code Playgroud)