salto linea c# string shorthand

linea - enter en c#



Cadena MultilĂ­nea Literal en C# (10)

¿Por qué la gente sigue confundiendo cadenas con literales de cuerdas? La respuesta aceptada es una gran respuesta a una pregunta diferente; no a este

Sé que este es un tema antiguo, pero vine aquí con posiblemente la misma pregunta que el OP, y es frustrante ver cómo las personas siguen malinterpretándolo. O tal vez lo estoy leyendo mal, no lo sé.

En términos generales, una cadena es una región de la memoria de la computadora que, durante la ejecución de un programa, contiene una secuencia de bytes que se pueden asignar a caracteres de texto. Un literal de cadena, por otro lado, es un fragmento de código fuente, aún no compilado, que representa el valor utilizado para inicializar una cadena más adelante, durante la ejecución del programa en el que aparece.

En C #, la declaración ...

string query = "SELECT foo, bar" + " FROM table" + " WHERE id = 42";

... no produce una cadena de tres líneas sino un liner; la concatenación de tres cadenas (cada una inicializada desde un literal diferente) ninguna de las cuales contiene un modificador de nueva línea.

Lo que el OP parece estar preguntando, al menos lo que yo preguntaría con esas palabras, no es cómo introducir, en la cadena compilada, saltos de línea que imiten a los que se encuentran en el código fuente, sino cómo dividir la claridad por mucho tiempo. , una sola línea de texto en el código fuente sin introducir cortes en la cadena compilada. Y sin requerir un tiempo de ejecución prolongado, dedica a unir las múltiples subcadenas procedentes del código fuente. Como las barras invertidas finales dentro de un literal de cadena multilínea en javascript o C ++.

Al sugerir el uso de cadenas textuales, no importa el StringBuilder s, String.Join s o incluso funciones anidadas con inversión de cadenas y lo que no, me hace pensar que las personas no están realmente entendiendo la pregunta. O tal vez no lo entiendo.

Por lo que sé, C # no (al menos en la versión paleolítica que sigo usando, de la década anterior) tiene una función para producir de forma limpia literales de cadenas multilínea que se pueden resolver durante la compilación en lugar de la ejecución.

Tal vez las versiones actuales lo admiten, pero pensé que compartiría la diferencia que percibo entre cadenas y literales de cadenas.

¿Hay una manera fácil de crear un literal de cadena multilínea en C #?

Esto es lo que tengo ahora:

string query = "SELECT foo, bar" + " FROM table" + " WHERE id = 42";

Sé que PHP tiene

<<<BLOCK BLOCK;

¿C # tiene algo similar?


Como nota al margen, con C # 6.0 ahora puede combinar cadenas interpoladas con el literal de cadena textual:

string camlCondition = $@" <Where> <Contains> <FieldRef Name=''Resource''/> <Value Type=''Text''>{(string)parameter}</Value> </Contains> </Where>";


El problema con el uso de la cadena literal que encuentro es que puede hacer que su código se vea un poco " raro " porque para no obtener espacios en la cadena, tiene que estar completamente alineado a la izquierda:

var someString = @"The quick brown fox...";

Puaj

Así que la solución que me gusta usar, que mantiene todo perfectamente alineado con el resto de su código es:

var someString = String.Join( Environment.NewLine, "The", "quick", "brown", "fox...");

Y, por supuesto, si solo desea dividir lógicamente las líneas de una declaración SQL como la suya y no necesita una nueva línea, siempre puede sustituir " Environment.NewLine por Environment.NewLine " " .


No he visto esto, así que lo publicaré aquí (si está interesado en pasar una cadena también puede hacer esto). La idea es que puede dividir la cadena en varias líneas y agregar su propio contenido (también en múltiples líneas) de la forma que desee. Aquí "tableName" se puede pasar a la cadena.

private string createTableQuery = ""; void createTable(string tableName) { createTableQuery = @"CREATE TABLE IF NOT EXISTS ["+ tableName + @"] ( [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [Key] NVARCHAR(2048) NULL, [Value] VARCHAR(2048) NULL )"; }


Otra cosa que hay que tener en cuenta es el uso de literales de cadena en cadena. Formato. En ese caso, necesita escapar de llaves / corchetes ''{'' y ''}''.

// this would give a format exception string.Format(@"<script> function test(x) { return x * {0} } </script>", aMagicValue) // this contrived example would work string.Format(@"<script> function test(x) {{ return x * {0} }} </script>", aMagicValue)



Puedes usar @ y "" .

string sourse = @"{ ""items"":[ { ""itemId"":0, ""name"":""item0"" }, { ""itemId"":1, ""name"":""item1"" } ] }";


Puedes usar estos dos métodos:

private static String ReverseString(String str) { int word_length = 0; String result = ""; for (int i = 0; i < str.Length; i++) { if (str[i] == '' '') { result = " " + result; word_length = 0; } else { result = result.Insert(word_length, str[i].ToString()); word_length++; } } return result; } //NASSIM LOUCHANI public static string SplitLineToMultiline(string input, int rowLength) { StringBuilder result = new StringBuilder(); StringBuilder line = new StringBuilder(); Stack<string> stack = new Stack<string>(ReverseString(input).Split('' '')); while (stack.Count > 0) { var word = stack.Pop(); if (word.Length > rowLength) { string head = word.Substring(0, rowLength); string tail = word.Substring(rowLength); word = head; stack.Push(tail); } if (line.Length + word.Length > rowLength) { result.AppendLine(line.ToString()); line.Clear(); } line.Append(word + " "); } result.Append(line); return result.ToString(); }

En SplitLineToMultiline (), necesita definir la cadena que desea usar y la longitud de la fila, es muy simple. Gracias .


Se llama un literal literal de cadena en C #, y solo es cuestión de poner @ antes del literal. Esto no solo permite varias líneas, sino que también desactiva el escape. Así que por ejemplo puedes hacer:

string query = @"SELECT foo, bar FROM table WHERE name = ''a/b''";

Lo único que se escapa es que si desea una comilla doble, debe agregar un símbolo de comilla doble adicional:

string quote = @"Jon said, ""This will work,"" - and it did!";


Si no quieres espacios / nuevas líneas, la adición de cadenas parece funcionar:

var myString = String.Format( "hello " + "world" + " i am {0}" + " and I like {1}.", animalType, animalPreferenceType ); // hello world i am a pony and I like other ponies.

Puede ejecutar lo anterior here si lo desea.