66 votes

C# : Limiter la longueur d'une chaîne ?

Je me demandais simplement comment je pouvais limiter la longueur d'une chaîne en C#.

 string foo = "1234567890";

Disons que nous avons cela. Comment puis-je limiter foo à dire 5 caractères ?

41voto

Michael Points 1649

Vous pouvez étendre la classe "string" pour vous permettre de renvoyer une chaîne limitée.

 using System;

namespace ConsoleApplication1
{
   class Program
   {
      static void Main(string[] args)
      {
         // since specified strings are treated on the fly as string objects...
         string limit5 = "The quick brown fox jumped over the lazy dog.".LimitLength(5);
         string limit10 = "The quick brown fox jumped over the lazy dog.".LimitLength(10);
         // this line should return us the entire contents of the test string
         string limit100 = "The quick brown fox jumped over the lazy dog.".LimitLength(100);

         Console.WriteLine("limit5   - {0}", limit5);
         Console.WriteLine("limit10  - {0}", limit10);
         Console.WriteLine("limit100 - {0}", limit100);

         Console.ReadLine();
      }
   }

   public static class StringExtensions
   {
      /// <summary>
      /// Method that limits the length of text to a defined length.
      /// </summary>
      /// <param name="source">The source text.</param>
      /// <param name="maxLength">The maximum limit of the string to return.</param>
      public static string LimitLength(this string source, int maxLength)
      {
         if (source.Length <= maxLength)
         {
            return source;
         }

         return source.Substring(0, maxLength);
      }
   }
}

Résultat:

limit5 - Le q limit10 - Le rapide limit100 - Le brun rapide le renard a sauté par-dessus le chien paresseux.

16voto

Jon Skeet Points 692016

Vous ne pouvez pas. Gardez à l'esprit que foo est une variable de type string .

Vous pouvez créer votre propre type, disons BoundedString , et avoir :

 BoundedString foo = new BoundedString(5);
foo.Text = "hello"; // Fine
foo.Text = "naughty"; // Throw an exception or perhaps truncate the string

... mais vous ne pouvez pas empêcher une variable de chaîne d'être définie sur une référence de chaîne (ou null).

Bien sûr, si vous avez une propriété de chaîne , vous pouvez le faire :

 private string foo;
public string Foo
{
    get { return foo; }
    set
    {
        if (value.Length > 5)
        {
            throw new ArgumentException("value");
        }
        foo = value;
    }
}

Cela vous aide-t-il quel que soit votre contexte plus large ?

10voto

TTT Points 529

string shortFoo = foo.Length > 5 ? foo.Substring(0, 5) : foo;

Notez que vous ne pouvez pas simplement utiliser foo.Substring(0, 5) car il générera une erreur lorsque foo fait moins de 5 caractères.

6voto

jmservera Points 3239

S'il s'agit d'une propriété de classe, vous pouvez le faire dans le setter :

 public class FooClass
{
   private string foo;
   public string Foo
   {
     get { return foo; }
     set
     {
       if(!string.IsNullOrEmpty(value) && value.Length>5)
       {
            foo=value.Substring(0,5);
       }
       else
            foo=value;
     }
   }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X