98 - Crear string de múltiples líneas con el modificador @


Normalmente cuando definimos una variable de tipo string e inmediatamente la inicializamos lo hacemos en una única línea:

string nombre = "Juan Carlos";

Si la cadena es grande normalmente podemos utilizar el operado + para concatenar cada uno de los string:

            string sql = "select codigo, descripcion, precio " +
                         "  from articulos " +
                         "  where precio>10";

Pero eventualmente podemos utilizar el modificador @ previo a las comillas dobles y disponer un string de múltiples líneas sin tener que concatenar:

            string sql = @"select codigo, descripcion, precio
from articulos 
where precio>10";

Cuando antecedemos el caracter @ luego significa que el string estará constituido por múltiples líneas, los saltos de línea luego están presentes en el string almacenado. Si imprimirmos la variable 'sql' luego su contenido es:

C# string de múltiples líneas

Problema

Confeccionar una aplicación que muestre un menú de opciones con el siguiente formato:

1 - Carga de 2 valores
2 - Mostrar la suma
3 - Mostrar la resta
4 - Mostrar el producto
5 - Mostrar la división
6 - Finalizar

Almacenar todas las opciones del menú en un único string de múltiples líneas.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StringMultiplesLineas1
{
    class OperacionNumeros
    {
        public int Numero1 { get; set; }
        public int Numero2 { get; set; }

        public OperacionNumeros()
        {
            MenuOpciones();
        }

        private void MenuOpciones()
        {
            string opciones =
@"1 - Carga de 2 valores
2 - Mostrar la suma
3 - Mostrar la resta
4 - Mostrar el producto
5 - Mostrar la división
6 - Finalizar";
            int op;
            do
            {
                Console.WriteLine(opciones);
                Console.Write("Elija su opcion:");
                op = int.Parse(Console.ReadLine());
                switch(op)
                {
                    case 1:
                        Cargar();
                        break;
                    case 2:
                        Sumar();
                        break;
                    case 3:
                        Restar();
                        break;
                    case 4:
                        Multiplicar();
                        break;
                    case 5:
                        Dividir();
                        break;
                }
                Console.WriteLine("Presione una tecla para continuar");
                Console.ReadKey();
                Console.Clear();
            } while (op != 6);
        }

        private void Cargar()
        {
            Console.Write("Ingrese primer valor:");
            Numero1 = int.Parse(Console.ReadLine());
            Console.Write("Ingrese segundo valor:");
            Numero2 = int.Parse(Console.ReadLine());
        }

        private void Sumar()
        {
            Console.WriteLine($"La suma de {Numero1} y {Numero2} es {Numero1 + Numero2}");
        }

        private void Restar()
        {
            Console.WriteLine($"La resta de {Numero1} y {Numero2} es {Numero1 - Numero2}");
        }

        private void Multiplicar()
        {
            Console.WriteLine($"La multiplicación de {Numero1} y {Numero2} es {Numero1 * Numero2}");
        }

        private void Dividir()
        {
            Console.WriteLine($"La division de {Numero1} y {Numero2} es {Numero1 / Numero2}");
        }



    }

    class Program
    {
        static void Main(string[] args)
        {
            new OperacionNumeros();
        }
    }
}

Creamos una clase llamada 'OperacionNumeros' donde definimos dos propiedades que nos permiten almacenar los dos valores ingresados por teclado:

    class OperacionNumeros
    {
        public int Numero1 { get; set; }
        public int Numero2 { get; set; }

En el método 'MenuOpciones' definimos un string llamado 'opciones' con múltiples líneas:

        private void MenuOpciones()
        {
            string opciones =
@"1 - Carga de 2 valores
2 - Mostrar la suma
3 - Mostrar la resta
4 - Mostrar el producto
5 - Mostrar la división
6 - Finalizar";

Dentro de un ciclo repetitivo mostramos el menú de opciones y según el número que carga el operador procedemos a llamar al método respectivo:

            int op;
            do
            {
                Console.WriteLine(opciones);
                Console.Write("Elija su opcion:");
                op = int.Parse(Console.ReadLine());
                switch(op)
                {
                    case 1:
                        Cargar();
                        break;
                    case 2:
                        Sumar();
                        break;
                    case 3:
                        Restar();
                        break;
                    case 4:
                        Multiplicar();
                        break;
                    case 5:
                        Dividir();
                        break;
                }
                Console.WriteLine("Presione una tecla para continuar");
                Console.ReadKey();
                Console.Clear();
            } while (op != 6);
        }

Si ejecutamos el programa podemos comprobar que se respetan los saltos de línea cuando imprimimos la variable 'opciones':

C# string de múltiples líneas

Interpolación de string con strings de múltiples líneas

Podemos utilizar la interpolación de string si los mismos tienen múltiples líneas. Es importante disponer el modificador '$' previo al modificar '@' si no disponemos de la versión C# 8 o superiores:

        private void TodasLasOperaciones()
        {
            string resultado =
 $@"La suma de {Numero1} y {Numero2} es {Numero1 + Numero2}
La resta de {Numero1} y {Numero2} es {Numero1 - Numero2}
La multiplicación de {Numero1} y {Numero2} es {Numero1 * Numero2}
La division de {Numero1} y {Numero2} es {Numero1 / Numero2}";
            Console.WriteLine(resultado);
        }

Retornar