Saludos a todos… necesito Trim un String. Pero quiero quitar todos los repetidos espacios en blanco dentro de la propia Cadena, no sólo al final o al inicio de la misma. Yo podría hacerlo con un método como:

public static string ConvertWhitespacesToSingleSpaces(string value)
{
    value = Regex.Replace(value, @"\s+", " ");
}

Que tengo de aquí. Pero quiero que este trozo de código se llama dentro de la String.Trim() sí mismo, así que yo creo que es necesario ampliar o sobrecarga o anular el Trim método… hay una manera de hacer eso?

Gracias de antemano.

InformationsquelleAutor Girardi | 2011-02-05

5 Comentarios

  1. 151

    Ya que no se puede extender cadena.Trim(). Usted podría hacer un método de Extensión como se describe aquí que los adornos y reduce el espacio en blanco.

    namespace CustomExtensions
    {
        //Extension methods must be defined in a static class
        public static class StringExtension
        {
            //This is the extension method.
            //The first parameter takes the "this" modifier
            //and specifies the type for which the method is defined.
            public static string TrimAndReduce(this string str)
            {
                return ConvertWhitespacesToSingleSpaces(str).Trim();
            }
    
            public static string ConvertWhitespacesToSingleSpaces(this string value)
            {
                return Regex.Replace(value, @"\s+", " ");
            }
        }
    }

    Se puede utilizar como así

    using CustomExtensions;
    
    string text = "  I'm    wearing the   cheese.  It isn't wearing me!   ";
    text = text.TrimAndReduce();

    Le da

    text = "I'm wearing the cheese. It isn't wearing me!";
    • Qué archivo es necesario un nombre especial? O ¿a dónde guardar esto? Puede ser ubicada en un Util de clase o algo así?
    • Usted puede poner en cualquier lugar, siempre que se hace referencia en el proyecto. Si se les pone en un determinado espacio de nombres, acaba de traer con un ‘uso’ declaración como cualquier otra clase.
    • ¿por qué no devolver el regex derecho de la TrimAndReduce función? que se hubiera realizado su respuesta mucho más sencillo de leer. A menos que usted utilice su respuesta tanto que usted necesita llamar a que en otros lugares LOL
  2. 23

    Es posible? Sí, pero sólo con un método de extensión

    La clase System.String es sellada de modo que no puede utilizar primordial o de la herencia.

    public static class MyStringExtensions
    {
      public static string ConvertWhitespacesToSingleSpaces(this string value)
      {
        return Regex.Replace(value, @"\s+", " ");
      }
    }
    
    //usage: 
    string s = "test   !";
    s = s.ConvertWhitespacesToSingleSpaces();
    • Para ser claros, no, no es posible modificar las acciones que String.Trim tomar.
  3. 10

    Hay un sí y un no a su pregunta.

    Sí, puede extender los tipos existentes mediante el uso de métodos de extensión. Los métodos de extensión, naturalmente, sólo puede acceder a la interfaz pública de la tipo.

    public static string ConvertWhitespacesToSingleSpaces(this string value) {...}
    
    //some time later...
    "hello world".ConvertWhitespacesToSingleSpaces()

    No, usted No puede llamar a este método Trim(). Los métodos de extensión no participar en la sobrecarga. Creo que un compilador debe dar un mensaje de error que detalla este.

    Los métodos de extensión sólo son visibles si el espacio de nombres que contiene el tipo que define el método que se está utilizando ed.

  4. 2

    Además de utilizar los métodos de extensión — probablemente un buen candidato aquí, también es posible «wrap» de un objeto (por ejemplo, el objeto «composición»). Mientras los envueltos de forma no contiene más información que la cosa está envuelto, a continuación, los envueltos de elemento puede ser limpiamente pasa a través implícito o explícito de las conversiones sin pérdida de información: sólo un cambio de tipo de interfaz/.

    Feliz codificación.

Dejar respuesta

Please enter your comment!
Please enter your name here