Pregunta ¿Hay un método "Espacio (n)" en C # /. Net?


Estoy convirtiendo un antiguo programa VB6 a C # (.Net 4.0) y en una rutina hace mucha manipulación y generación de cadenas. La mayoría del código VB6 nativo que utiliza tiene análogos en la clase de cadena C #, por ejemplo, Recortar(). Pero parece que no puedo encontrar un reemplazo para Espacio(norte), donde aparentemente genera una cadena norte espacios.

Mirando a través de la documentación de MSDN, parece haber un Espacio() método para VB.Net pero no pude encontrarlo mencionado fuera del contexto de VB.Net. ¿Por qué es esto? Pensé que todos los lenguajes .Net comparten el mismo CLR.

¿Tiene C # o .Net un genérico Espacio() método que puedo usar en C # que estoy pasando por alto en alguna parte?

nótese bien Soy consciente de que escribir frases sencillas para generar n-espacios es una pregunta-cuestionario popular y un juego de barra de programadores para algunos lenguajes de programación, pero no estoy buscando consejos sobre eso. Si no hay una manera nativa de hacer esto en C # /. Net, es bastante fácil escribir un método simple; Simplemente no quiero reinventar la rueda.


25
2018-03-24 18:18


origen


Respuestas:


Usa este constructor System.String:

new String(' ', 10);

http://msdn.microsoft.com/en-us/library/xsa4321w(v=vs.110).aspx

Aquí hay un buen método de extensión que puede usar también (aunque probablemente sea mejor usar el String constructor y guarde la llamada al método adicional):

public static class CharExtensions
{
    public static string Repeat(this char c, int count)
    {
        return new String(c, count);
    }
}
...
string spaces = ' '.Repeat(10);

33
2018-03-24 18:19



los string clase tiene un constructor eso te da una cadena que consiste en norte copias de un personaje especificado:

// 32 spaces
string str = new string(' ', 32);

7
2018-03-24 18:19



.NET tiene un conjunto de funciones de compatibilidad en Microsoft.VisualBasic espacio de nombres para convertir el antiguo código VB a .NET, uno de ellos es un recrea el Space función.

var myString = Microsoft.VisualBasic.Strings.Space(10); //Or just Strings.Space(10); if you do "using Microsoft.VisualBasic;" at the top of your file.

Sin embargo, recomiendo usar el new String(' ', 10) método las otras respuestas mencionan.


6
2018-03-24 18:21



Yo siempre uso:

var myString = "".PadLeft(n);

6
2018-03-24 18:36



Por lo general, cuando alguien está usando la función de espacio en VB es porque concatenan cadenas y necesitan un espacio o espacios a la derecha.

Dim strConcatVB6 As String
strConcatVB6 = "Someone" & Space(1) & "Help" & Space(1) & "Out!"
Dim strConcatNet As String = String.Concat("Someone", Space(1), "Help", Space(1), "Out!")
Debug.WriteLine(strConcatVB6)
Debug.WriteLine(strConcatNet)

Un enfoque simple para engañar a la función de espacio al portar el código es obviamente crear una función que lo imite en C #.

Func<int, string> Space = (n) => ("".PadRight(n));
string strConcat = string.Concat("Somebody", Space(1), "Help", Space(1), "Out!");
MessageBox.Show(strConcat);

Desearía que el equipo de VB desaprobase las viejas funciones feos (que solían ser bonitas) de cadenas de versiones anteriores de las especificaciones del lenguaje que se han simplificado en .NET y que funcionen en las geniales como Space. Mis disculpas al cartel de la pregunta original porque buscabas una función nativa en C # para la función VBs Space.


2
2017-12-17 01:00



Strings.Space existe en Microsoft.VisualBasic.dll. Esto parece estar "incorporado" en VB.NET en lugar de C # debido a dos razones:

  • Mientras que C # requiere using declaraciones, el compilador de VB.NET permite configurar las importaciones automáticas (y Microsoft.VisualBasic está incluido en la configuración predeterminada).

  • VB trata a los miembros del "módulo" como funciones globales (observe el [StandardModuleAttribute] sobre el Instrumentos de cuerda clase).

Pero sí, podrías agregar una referencia a Microsoft.VisualBasic.dll y escribe:

using Microsoft.VisualBasic;

...

Strings.Space(n)

Por supuesto, la razón por la que existen estos métodos fue principalmente para evitar el reciclaje de los desarrolladores de VB6. Si se está tomando el tiempo de convertir la aplicación, probablemente sería mejor que la vuelva a implementar utilizando funciones .NET como cadenas de formato.


1
2018-03-24 18:44



//Author: Puffgroovy
//Email: ZSSZCMRIVYDT@spammotel.com
//
// Usage - CustomFunctions cf = new CustomFunctions();
// String strMessage = "Error Found - " + cf._DoubleQuote() + e.Message + cf._Space(23) + cf._DoubleQuote();
//


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


namespace DHHS_CustomFunctions
{
    class CustomFunctions
    {
        /// <summary>
        /// Same as the VB.NET Space Function
        /// </summary>
        /// <param name="intNumberOfSpaces"></param>
        /// <returns>String</returns>
        public string _Space(int intNumberOfSpaces)
        {
            return new String(' ', intNumberOfSpaces);
        }

        /// <summary>
        /// New Line Character
        /// </summary>
        /// <returns></returns>
        public string _NewLine()
        {
            return ("\n");
        }

        /// <summary>
        /// Double Quote Character
        /// </summary>
        /// <returns></returns>
        public string _DoubleQuote()
        {
            return ("\"");
        }

        /// <summary>
        /// SingleQuote Character
        /// </summary>
        /// <returns></returns>
        public string _SingleQuote()
        {
            return ("\'");
        }

        /// <summary>
        /// Calls Environment.Exit(0);
        /// </summary>
        public void _Quit()
        {
            Environment.Exit(0);
        }

        /// <summary>
        /// Returns the backslash character
        /// </summary>
        /// <returns></returns>
        public string _Backslash()
        {

            return ("\\");
        }

        /// <summary>
        /// Returns a null character
        /// </summary>
        /// <returns></returns>
        public string _Null()
        {

            return ("\0");
        }

        /// <summary>
        /// Bell. Same as Alert
        /// </summary>
        /// <returns></returns>
        public string _Bell()
        {

            return ("\a");
        }

        /// <summary>
        /// Alert. Same as Bell
        /// </summary>
        /// <returns></returns>
        public string _Alert()
        {

            return ("\a");
        }

        /// <summary>
        /// Backspace Character
        /// </summary>
        /// <returns></returns>
        public string _Backspace()
        {

            return ("\b");
        }

        /// <summary>
        /// Form Feed Character
        /// </summary>
        /// <returns></returns>
        public string _FormFeed()
        {

            return ("\f");
        }

        /// <summary>
        /// Carriage Return Character
        /// </summary>
        /// <returns></returns>
        public string _CarriageReturn()
        {

            return ("\r");`enter code here`
        }

        /// <summary>`enter code here`
        /// Vertical Tab Character
        /// </summary>
        /// <returns></returns>
        public string _VerticleTab()
        {

            return ("\v");
        }
    }
}

0
2018-02-04 16:39