sufijos prefijos otra linea continuar codigo c# .net string multiline verbatim-string

prefijos - continuar codigo en otra linea c#



Formato multilĂ­nea para cadenas textuales en c#(prefijo con @) (3)

¿Qué tal una extensión de cadena? Actualización: Volví a leer tu pregunta y espero que haya una mejor respuesta. Esto es algo que también me molesta y tener que resolverlo como se muestra a continuación es frustrante, pero en el lado positivo funciona.

using System.Text.RegularExpressions; namespace ConsoleApplication1 { public static class StringExtensions { public static string StripLeadingWhitespace(this string s) { Regex r = new Regex(@"^/s+", RegexOptions.Multiline); return r.Replace(s, string.Empty); } } }

Y un ejemplo de programa de consola:

using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string x = @"This is a test of the emergency broadcasting system."; Console.WriteLine(x); Console.WriteLine(); Console.WriteLine("---"); Console.WriteLine(); Console.WriteLine(x.StripLeadingWhitespace()); Console.ReadKey(); } } }

Y la salida:

This is a test of the emergency broadcasting system. --- This is a test of the emergency broadcasting system.

Y una forma más limpia de usarlo si decides ir por esta ruta:

string x = @"This is a test of the emergency broadcasting system.".StripLeadingWhitespace(); // consider renaming extension to say TrimIndent() or similar if used this way

Me encanta usar las @ "cadenas" en c #, especialmente cuando tengo un montón de texto de varias líneas. La única molestia es que el formato de mi código va a Doodie al hacer esto, porque las líneas segunda y superior se empujan completamente hacia la izquierda en lugar de usar la sangría de mi código bellamente formateado. Sé que esto es por diseño, pero ¿hay alguna opción / forma de permitir que estas líneas sean sangradas, sin agregar las pestañas / espacios reales a la salida?

agregando ejemplo:

var MyString = @" this is a multi-line string in c#.";

La declaración de mi variable está sangrada a la profundidad "correcta", pero las líneas segunda y posteriores de la cadena se desplazan hacia el margen izquierdo, por lo que el código es un poco feo. Puedes agregar pestañas al inicio de las líneas 2 y 3, pero la cadena en sí contendrá esas pestañas ... ¿tiene sentido?


Cymen ha dado la solución correcta. Utilizo un enfoque similar al derivado del método stripMargin () de Scala. Así es como se ve mi método de extensión:

public static string StripMargin(this string s) { return Regex.Replace(s, @"[ /t]+/|", string.Empty); }

Uso:

var mystring = @" |SELECT | * |FROM | SomeTable |WHERE | SomeColumn IS NOT NULL" .StripMargin();

Resultado:

SELECT * FROM SomeTable WHERE SomeColumn IS NOT NULL


No puedo pensar en una respuesta que satisfaga completamente su pregunta, sin embargo, podría escribir una función que elimine los espacios iniciales de las líneas de texto contenidas en una cadena y llamarla en cada creación de dicha cadena.

var myString = TrimLeadingSpacesOfLines(@" this is a a multi-line string in c#.");

Sí, es un pirateo, pero especificó que acepta su pirateo en su pregunta.