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

时间:2015-08-18 11:18:41

标签: c# concatenation

我没有完全看出差异。

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

我猜它在后台做了非常相似的事情。

有人能告诉我为什么经常这么做吗?

5 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:8)

Path.Combine做的不仅仅是字符串连接。如果你看source code;

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

答案 2 :(得分:4)

这是实施

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

答案 3 :(得分:2)

您避免使用双路径分隔符。如果一个路径元素已经具有前导反斜杠。 Path.Combine检查它并确保只存在一个反斜杠。

答案 4 :(得分:2)

根据此documentation Path.Combine在内部使用+-Operator执行字符串连接。

 private static String CombineNoChecks(String path1, String path2) {
        if (path2.Length == 0)
            return path1;

        if (path1.Length == 0)
            return path2;

        if (IsPathRooted(path2))
            return path2;

        char ch = path1[path1.Length - 1];
        if (ch != DirectorySeparatorChar && ch != AltDirectorySeparatorChar && ch != VolumeSeparatorChar) 
            return path1 + DirectorySeparatorCharAsString + path2;
        return path1 + path2;
    }