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.