41 votes

Existe-t-il une fonction native Proper Case pour les chaînes de caractères en C# ?

J'étais sur le point d'écrire ma propre extension C# pour convertir une chaîne de caractères en majuscules (c'est-à-dire en mettant la première lettre de chaque mot en majuscule), puis je me suis demandé s'il n'existait pas une fonction C# native pour faire cela... existe-t-il ?

72voto

Jamie Dixon Points 23891
String s  = "yOu caN Use thIs"

s = System.Threading.Thread.CurrentThread
           .CurrentCulture.TextInfo.ToTitleCase(s.ToLower());

La principale limite que je vois à cette méthode est qu'il ne s'agit pas d'une "vraie" casse de titre. Par exemple, dans la phrase "WaR aNd peaCe", la partie "and" devrait être en minuscule en anglais. Cette méthode le mettrait en majuscule.

37voto

Greg Beech Points 55270

Il existe une fonction qui met en majuscule les premières lettres des mots Vous devez cependant consulter la section des remarques, car il présente certaines limitations qui peuvent le rendre inadapté à vos besoins.

13voto

TotPeRo Points 790

Vous pouvez simplement ajouter des méthodes d'extension au type Sting :

public static class StringExtension
{
    /// <summary>
    /// Use the current thread's culture info for conversion
    /// </summary>
    public static string ToTitleCase(this string str)
    {
        var cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
        return cultureInfo.TextInfo.ToTitleCase(str.ToLower());
    }

    /// <summary>
    /// Overload which uses the culture info with the specified name
    /// </summary>
    public static string ToTitleCase(this string str, string cultureInfoName)
    {
        var cultureInfo = new CultureInfo(cultureInfoName);
        return cultureInfo.TextInfo.ToTitleCase(str.ToLower());
    }

    /// <summary>
    /// Overload which uses the specified culture info
    /// </summary>
    public static string ToTitleCase(this string str, CultureInfo cultureInfo)
    {
        return cultureInfo.TextInfo.ToTitleCase(str.ToLower());
    }
}

10voto

Rick Points 21

Cela fonctionne

public static string ConvertTo_ProperCase(string text) 
{
    TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
    return myTI.ToTitleCase(text.ToLower());
}

0voto

user2987826 Points 1

Cela devrait fonctionner.

public static string ToTitleCase(this string strX)
{
    string[] aryWords = strX.Trim().Split(' ');

    List<string> lstLetters = new List<string>();
    List<string> lstWords = new List<string>();

    foreach (string strWord in aryWords)
    {
        int iLCount = 0;
        foreach (char chrLetter in strWord.Trim())
        {
            if (iLCount == 0)
            {
                lstLetters.Add(chrLetter.ToString().ToUpper());
            }
            else
            {
                lstLetters.Add(chrLetter.ToString().ToLower());
            }
            iLCount++;
        }
        lstWords.Add(string.Join("", lstLetters));
        lstLetters.Clear();
    }

    string strNewString = string.Join(" ", lstWords);

    return strNewString;
}

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