working usar unity ruta not combine c# concatenation

usar - string to path c#



¿Cuál es la ventaja de usar Path.Combine sobre la concatenación de cadenas con ''+''? (5)

Aquí está la implementación

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

No veo la diferencia.

¿Qué podría hacer Path.Combine mejor que la concatenación de cadenas que funciona perfectamente?

Supongo que está haciendo algo muy similar en el fondo.

¿Alguien puede decirme por qué es tan frecuente?


De acuerdo con esta documentation Path.Combine realiza internamente una concatenación de cadenas usando +-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; }


Evita los separadores de doble camino. Si un elemento de ruta ya tiene una barra diagonal inversa inicial. Path.Combine comprueba eso y garantiza que solo haya una barra invertida.


Path.Combine hace más cosas que solo una concatenación de cadenas. Si nos fijamos en el código fuente ;

  • Checks ambas rutas tengan un carácter no válido o no
  • Checks segundo parámetro sea la ruta raíz o no
  • Checks último carácter de la primera ruta es director o directorio alternativo o separador de volumen o no. Si no, concatene ambas cadenas con un separador de directorio entre ellas

Path.Combine usa Path.PathSeparator y comprueba si la primera ruta ya tiene un separador al final para que no duplique los separadores. Además, verifica si los elementos de la ruta a combinar tienen caracteres no válidos.