metodos before c# string

c# - before - ¿Qué significa $ antes de una cadena?



string methods c# (11)

Iba a usar una cadena literal pero escribí por error $ lugar de @ .

Pero el compilador no me dio ningún error y compiló con éxito.

Quiero saber qué es y qué hace. Lo busqué pero no pude encontrar nada.

Sin embargo, no es como una cadena literal porque no puedo escribir:

string str = $"text/";

¿Alguien sabe qué significa $ before string en C #?

string str = $"text";

Estoy usando Visual studio 2015 CTP.


Característica genial. Solo quiero señalar el énfasis en por qué esto es mejor que string.format si no es evidente para algunas personas.

Leí a alguien diciendo orden string.format a "{0} {1} {2}" para que coincida con los parámetros. No está obligado a ordenar "{0} {1} {2}" en string.format, también puede hacer "{2} {0} {1}". Sin embargo, si tiene muchos parámetros, como 20, realmente desea secuenciar la cadena a "{0} {1} {2} ... {19}". Si se trata de un desorden aleatorio, tendrá dificultades para alinear sus parámetros.

Con $, puede agregar parámetros en línea sin contar sus parámetros. Esto hace que el código sea mucho más fácil de leer y mantener.

La desventaja de $ es que no puede repetir el parámetro en la cadena fácilmente, debe escribirlo. Por ejemplo, si está cansado de escribir System.Environment.NewLine, puede hacer string.format ("... {0} ... {0} ... {0}", System.Environment.NewLine), pero, en $, tienes que repetirlo. No puede hacer $ "{0}" y pasarlo a string.format porque $ "{0}" devuelve "0".

En la nota al margen, he leído un comentario en otra publicación duplicada. No pude comentar, así que aquí está. Dijo que

string msg = n + " sheep, " + m + " chickens";

crea más de una cadena de objetos. Esto no es cierto en realidad. Si hace esto en una sola línea, solo crea una cadena y se coloca en el caché de cadenas.

1) string + string + string + string; 2) string.format() 3) stringBuilder.ToString() 4) $""

Todos ellos devuelven una cadena y solo crean un valor en el caché.

Por otra parte:

string+= string2; string+= string2; string+= string2; string+= string2;

Crea 4 valores diferentes en el caché porque hay 4 ";".

Por lo tanto, será más fácil escribir código como el siguiente, pero crearía cinco cadenas interpoladas a medida que Carlos Muñoz corrigiera:

string msg = $"Hello this is {myName}, " + $"My phone number {myPhone}, " + $"My email {myEmail}, " + $"My address {myAddress}, and " + $"My preference {myPreference}.";

Esto crea una sola cadena en el caché mientras tiene un código muy fácil de leer. No estoy seguro del rendimiento, pero estoy seguro de que MS lo optimizará si aún no lo está haciendo.


Crea una cadena interpolada .

De MSDN

Usado para construir cadenas. Una expresión de cadena interpolada se parece a una cadena de plantilla que contiene expresiones. Una expresión de cadena interpolada crea una cadena al reemplazar las expresiones contenidas con las representaciones ToString de los resultados de las expresiones.

ex:

var name = "Sam"; var msg = $"hello, {name}"; Console.WriteLine(msg); // hello, Sam

Puedes usar expresiones dentro de la cadena interpolada

var msg = $"hello, {name.ToLower()}"; Console.WriteLine(msg); // hello, sam

Lo bueno de esto es que no necesita preocuparse por el orden de los parámetros como lo hace con String.Format .

var s = String.Format("{0},{1},{2}...{88}",p0,p1,..,p88);

Ahora, si desea eliminar algunos parámetros, debe ir y actualizar todos los recuentos, lo cual ya no es el caso.

Tenga en cuenta que el buen string.format antiguo string.format siendo relevante si desea especificar información cultural en su formatting .


El siguiente ejemplo resalta varias ventajas de usar cadenas interpoladas sobre string.Format() en cuanto a limpieza y legibilidad. También muestra que el código dentro de {} se evalúa como cualquier otro argumento de función, tal como lo haría si se string.Format() .

Console.WriteLine($"I can tab like {"this !", 5}.");


Es más conveniente que string.Format y puede usar intellisense aquí también.

Y aquí está mi método de prueba:

[TestMethod] public void StringMethodsTest_DollarSign() { string name = "Forrest"; string surname = "Gump"; int year = 3; string sDollarSign = $"My name is {name} {surname} and once I run more than {year} years."; string expectedResult = "My name is Forrest Gump and once I run more than 3 years."; Assert.AreEqual(expectedResult, sDollarSign); }


La sintaxis de $ es buena, pero con un inconveniente.

Si necesita algo como una plantilla de cadena, que se declara en el nivel de clase como campo ... bueno, en un lugar como debería ser.

Luego tienes que declarar las variables en el mismo nivel ... lo cual no es realmente genial.

Es mucho mejor usar la cadena. Sintaxis de formato para este tipo de cosas

using System; public class Example { public static void Main() { var name = "Horace"; var age = 34; // replaces {name} with the value of name, "Horace" var s1 = $"He asked, /"Is your name {name}?/", but didn''t wait for a reply."; Console.WriteLine(s1); // as age is an integer, we can use ":D3" to denote that // it should have leading zeroes and be 3 characters long // see https://docs.microsoft.com/en-us/dotnet/standard/base-types/how-to-pad-a-number-with-leading-zeros // // (age == 1 ? "" : "s") uses the ternary operator to // decide the value used in the placeholder, the same // as if it had been placed as an argument of string.Format // // finally, it shows that you can actually have quoted strings within strings // e.g. $"outer { "inner" } string" var s2 = $"{name} is {age:D3} year{(age == 1 ? "" : "s")} old."; Console.WriteLine(s2); } } // The example displays the following output: // He asked, "Is your name Horace?", but didn''t wait for a reply. // Horace is 034 years old.

El uso de globals no está realmente bien y además de eso, tampoco funciona con globals

class Example1_StringFormat { string template = $"{0} - {1}"; public string FormatExample1() { string some1 = "someone"; return string.Format(template, some1, "inplacesomethingelse"); } public string FormatExample2() { string some2 = "someoneelse"; string thing2 = "somethingelse"; return string.Format(template, some2, thing2); } }


No sé cómo funciona, ¡pero también puedes usarlo para tabular tus valores!

Ejemplo:

static class Example2_Format { //must have declaration in same scope static string some = ""; static string thing = ""; static string template = $"{some} - {thing}"; //This returns " - " and not "someone - something" as you would maybe //expect public static string FormatExample1() { some = "someone"; thing = "something"; return template; } //This returns " - " and not "someoneelse- somethingelse" as you would //maybe expect public static string FormatExample2() { some = "someoneelse"; thing = "somethingelse"; return template; } }

Por supuesto, puede reemplazar "esto!" con cualquier variable o algo significativo, así como también puedes cambiar la pestaña.


Se trata de cadenas interpoladas . Puede usar una cadena interpolada en cualquier lugar donde pueda usar un literal de cadena. Cuando ejecute su programa ejecutaría el código con el literal de cadena interpolado, el código calcula un nuevo literal de cadena al evaluar las expresiones de interpolación. Este cálculo ocurre cada vez que se ejecuta el código con la cadena interpolada.

var message = $"Sample, {text}";

Este ejemplo produce un valor de cadena donde se han calculado todos los valores de interpolación de cadena. Es el resultado final y tiene tipo string. Todas las apariciones de llaves dobles (“{{“ and “}}”) se convierten en una llave simple.

Si,

string text = "One";

Entonces el message contiene "Muestra, una".

Console.WriteLine(message); // Sample, One

Ejemplo

public class Person { public String firstName { get; set; } public String lastName { get; set; } } // Instantiate Person var person = new Person { firstName = "Albert", lastName = "Einstein" }; // We can print fullname of the above person as follows Console.WriteLine("Full name - " + person.firstName + " " + person.lastName); Console.WriteLine("Full name - {0} {1}", person.firstName, person.lastName); Console.WriteLine($"Full name - {person.firstName} {person.lastName}");

Salida

Full name - Albert Einstein Full name - Albert Einstein Full name - Albert Einstein

Referencia - MSDN


Significa interpolación de cadenas.

Lo protegerá porque agrega protección de tiempo de compilación en la evaluación de la cadena.

Ya no obtendrá una excepción con string.Format("{0}{1}",secondParamIsMissing)


Tenga en cuenta que también puede combinar los dos, lo cual es bastante bueno (aunque parece un poco extraño):

// simple interpolated verbatim string WriteLine($@"Path ""C:/Windows/{file}"" not found.");



$ es una abreviatura de String.Format y se usa con interpolaciones de cadenas, que es una nueva característica de C # 6. Como se usa en su caso, no hace nada, al igual que string.Format() no haría nada.

Se convierte en algo propio cuando se usa para construir cadenas con referencia a otros valores. Lo que antes tenía que escribirse como:

var anInt = 1; var aBool = true; var aString = "3"; var formated = string.Format("{0},{1},{2}", anInt, aBool, aString);

Ahora se convierte en:

var anInt = 1; var aBool = true; var aString = "3"; var formated = $"{anInt},{aBool},{aString}";

También hay una forma alternativa, menos conocida, de interpolación de cadenas usando $@ (el orden de los dos símbolos es importante). Permite que las características de una cadena @"" se mezclen con $"" para admitir interpolaciones de cadenas sin la necesidad de // toda la cadena. Entonces las siguientes dos líneas:

var someDir = "a"; Console.WriteLine($@"c:/{someDir}/b/c");

dará salida:

c:/a/b/c