vista una solicitar renderbody que puede porque pongo pasar pasa método mvc llamar llama iman electricidad directamente desde datos controlador c# string

c# - una - pasar datos del controlador a la vista mvc



¿Por qué funciona una ruta incluso si contiene una @ antes de "//"? (3)

Debido a que internamente FileStream durante la inicialización llama al método Path.NormalizePath(path, true, maxPathLength) para normalizar el valor de ruta pasado.

Puede llamar a este método con reflexión (tiene una sobrecarga, por lo que obtener MethodInfo es un poco complicado):

string path = @"C://Users//text.txt"; Type type = typeof(Path); var flags = BindingFlags.Static | BindingFlags.NonPublic; var binder = Type.DefaultBinder; var types = new Type[] { typeof(string), typeof(bool), typeof(int) }; var modifiers = new ParameterModifier[0]; var normalize = type.GetMethod("NormalizePath", flags, binder, types, modifiers); var result = normalize.Invoke(null, new object[] { path, true, 256});

Salida:

C: / Users / text.txt

Estoy un poco confundido. Pensé que "@" en c # es un signo para interpretar el texto literalmente como @ "C: / Users ...". Evita la necesidad de una doble barra invertida.

Pero, ¿por qué las rutas también funcionan si contienen barras invertidas dobles y @? Fe:

var temp = File.ReadAllText(@"C://Users//text.txt").ToString(); // no error

En ese caso, la cadena debe ser literalmente "C: // Users // text.txt", debido a la anterior "@", que no es una ruta válida de Windows (EDIT: Eso es incorrecto, es una ruta válida, solo explorador no lo aceptaré - gracias a Muctadir Dinar), entonces ¿por qué funciona esto?

Gracias por adelantado


Todos estos son caminos válidos:

C:/Users/text.txt C://Users//text.txt C:///Users///text.txt C:////Users////text.txt

"//" representa "/"
@"/" representa "/"
@"//" representa "//"
"////" representa "//"

Así que su @"C://Users//text.txt" representa "C:////Users////text.txt" que es válido

Puede llamar a Path.GetFullPath("") para obtener la ruta absoluta.

por ejemplo:

Console.WriteLine(@"C://Users//text.txt"); Console.WriteLine(Path.GetFullPath(@"C://Users//text.txt"));

Salida:
C: // Usuarios // texto.txt
C: / Users / text.txt


esa cadena @ "C: / Users / text.txt" se analizará con caracteres de barra invertida repetitivos, pero el sistema ignorará estos caracteres repetitivos al considerarlos como uno solo. por ejemplo, este código también funcionará:

string s=File.ReadAllText(@"C:///Users///text.txt");

o:

string s=File.ReadAllText(@"C:////////////Users///////////text.txt");

pero no es una buena idea hacerlo. Si recorres los caracteres dentro de esas cadenas de ruta, verás que en realidad hay varios caracteres de barra invertida.

foreach (char c in @"C:///Users///text.txt") ...

Nota: debe evitar especificar más de una barra invertida como separador de carpeta, ya que este comportamiento no es confiable y puede cambiarse en futuras versiones del sistema operativo o .net framework ...