来自Path.Combine method;
组合路径。如果指定路径之一的长度为零
字符串,此方法返回另一个路径。 如果 path2 包含一个
绝对路径,此方法返回path2。
Path.Combine 方法implemented as;
public static String Combine(String path1, String path2) {
if (path1==null || path2==null)
throw new ArgumentNullException((path1==null) ? "path1" : "path2");
Contract.EndContractBlock();
CheckInvalidPathChars(path1);
CheckInvalidPathChars(path2);
return CombineNoChecks(path1, path2);
}
这里怎么CombineNoChecks方法implemented;
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 + DirectorySeparatorChar + path2;
return path1 + path2;
}
和IsPathRooted方法implemented;
public static bool IsPathRooted(String path) {
if (path != null) {
int length = path.Length;
if ((length >= 1 && (path[0] == DirectorySeparatorChar || path[0] == AltDirectorySeparatorChar))
#if !PLATFORM_UNIX
|| (length >= 2 && path[1] == VolumeSeparatorChar)
#endif
) return true;
}
return false;
}
在你的情况下(path2 是 /jhjh/klk)这使得你的 path[0] 是 /。这就是你的path[0] == DirectorySeparatorChar 和length >= 1 表达式返回true 的原因,这就是你的IsPathRooted 方法返回true 的原因,这就是你的CombineNoChecks 方法返回path2 的原因。