使用 Path.Combine 比使用“+”连接字符串有什么优势?
What is the advantage of using Path.Combine over concatenating strings with '+'?
我看不出有什么区别。
Path.Combine
还有什么能比完美的字符串连接做得更好?
我猜它在后台做着非常相似的事情。
谁能告诉我为什么它经常受到青睐?
Path.Combine
使用 Path.PathSeparator
并检查第一个路径末尾是否已经有分隔符,因此它不会重复分隔符。此外,它还会检查要组合的路径元素是否包含无效字符。
您避免使用双路径分隔符。如果一个路径元素已经有一个前导反斜杠。 Path.Combine 检查并确保只存在一个反斜杠。
这里是实现
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;
}
根据此 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;
}
Path.Combine
做的不仅仅是字符串连接。如果您查看 source code;
我看不出有什么区别。
Path.Combine
还有什么能比完美的字符串连接做得更好?
我猜它在后台做着非常相似的事情。
谁能告诉我为什么它经常受到青睐?
Path.Combine
使用 Path.PathSeparator
并检查第一个路径末尾是否已经有分隔符,因此它不会重复分隔符。此外,它还会检查要组合的路径元素是否包含无效字符。
您避免使用双路径分隔符。如果一个路径元素已经有一个前导反斜杠。 Path.Combine 检查并确保只存在一个反斜杠。
这里是实现
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;
}
根据此 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;
}
Path.Combine
做的不仅仅是字符串连接。如果您查看 source code;