Pourquoi StringBuilder.Appendice ne pas ajouter une nouvelle ligne avec quelques cordes?

j'essaie d'utiliser stringbuilder pour créer un corps de chaîne à utiliser dans un message texte (Pas HTML). Cependant, certaines lignes (où j'inclus des données dynamiques, une nouvelle ligne n'est pas ajoutée, mais dans certains cas la nouvelle ligne fonctionne comme prévu.

y a-t-il quelque chose de basique qui me manque quand j'utilise la classe stringbuilder ou y a-t-il un processus plus fondamental qui devrait se produire?

dans le code ci-dessous:

sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com");
sbUser.AppendLine();
sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle); 
sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy"));
sbUser.AppendLine("==============================================================");
sbUser.AppendLine();

(ContentPage et thisEvent sont les classes personnalisées construit utilisation de Subsonic (v2). PageTitle est un type de sortie de chaîne de caractères)

est obtenir ce que un sortie:

    Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com

Selected event : My Event Date of event : 16 Sept 2012 ==============================================================

comme vous pouvez le voir, tout ce qui suit la troisième ligne du code fait que tout va sur une ligne.

toutefois, plus bas dans le code que j'utilise:

sbRR.AppendLine("First name : " + txtFirstname.Text.Trim());
sbRR.AppendLine("Surname : " + txtSurname.Text.Trim());
etc,

et tous ceux-ci apparaissent correctement sur les lignes séparées. Je ne vois pas pourquoi ce qui se passe.

le courrier électronique est composé comme telle

mailMessage.Body = sbUser.ToString() + sbRR.ToString();


ajouter le code suivant:

sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle + Environment.NewLine); 
sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy") + Environment.NewLine);

produit la sortie suivante:

Selected event : My Event

Date of event : 16 Sept 2012

==============================================================

ce qui fonctionne je suppose, sauf qu'il est ajouté 2 nouvelles lignes (L'appendice et l'environnement.Saut de ligne). il semble que le fait de tirer les données directement de la base de données dans un plugin de string semble jouer avec la fin de ligne. Même si j'ajoute du texte après le pull de la base de données, il reste sur un ligne.

UPDATE

le faire StringBuilder.Append("blah"+Environment.NewLine) produit le résultat correct, mais je ne comprends toujours pas pourquoi cela fonctionne et .AppendLine("blah"+<database content>) ne fonctionne pas.

28
demandé sur kolin 2012-06-22 16:04:28

6 réponses

au Lieu de

sbUser.AppendLine();

Essayez d'utiliser

sbUser.Append(Environment.NewLine);

Je ne sais pas pourquoi cela fonctionne...

24
répondu oleksii 2013-10-19 09:11:54

je sais que la question Est ancienne et a été marquée comme réponse, mais j'ai pensé que je voudrais ajouter ceci ici au cas où quelqu'un d'autre tombe sur ce que c'est le premier hit sur Google pour StringBuilder.AppendLine () ne fonctionne pas.

j'ai eu le même problème et il s'est avéré être un Outlook question. Outlook re-formate les e-mails textuels en supprimant les sauts de ligne supplémentaires. Vous pouvez cliquer sur "nous avons supprimé les sauts de ligne supplémentaires dans ce message - > restaurer les sauts de ligne" dans l'en-tête de l'e-mail individuel, ou modifier le paramètre qui ne ce méchant petit truc "Options->Mail->Format de Message->Supprimer les sauts de ligne dans les messages en texte brut"

La solution de contournement (puisque vous ne pouvez pas contrôler les paramètres des potentiels e-mail cible), j'ai trouvé ici Formatage Du Bulletin Et Le Numéro Supprimer Les Pauses Supplémentaires. En gros, si vous ajoutez deux caractères blancs au début de chaque ligne, Outlook ne reformatera pas le courriel.

Voici une méthode d'extension pour aider (méthode le nom est un peu verbeux donc modifier à votre goût :))

namespace System.Text
{
    public static class StringBuilderExtensions
    {
        public static void AppendLineWithTwoWhiteSpacePrefix(this StringBuilder sb, string value)
        {
            sb.AppendFormat("{0}{1}{2}", "  ", value, Environment.NewLine);
        }

        public static void AppendLineWithTwoWhiteSpacePrefix(this StringBuilder sb)
        {
            sb.AppendFormat("{0}{1}", "  ", Environment.NewLine);
        }
    }
}
27
répondu cjmurph 2014-07-21 08:26:51

utiliser Environment.NewLine

sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com");
sbUser.AppendLine(Environment.NewLine);
sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle); 
sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy"));
sbUser.AppendLine("==============================================================");
sbUser.AppendLine(Environment.NewLine);
6
répondu Liam 2012-06-22 12:07:32

utiliser Environment.NewLine après chaque ligne ou lorsque vous voulez de nouvelles de la ligne

par exemple:-

  sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com" + Environment.NewLine);
  sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle); 
0
répondu Nighil 2012-06-22 12:14:04

Windows 10 Initié aperçu de Construire 15007. Le Terminator de ligne par défaut et L'environnement.Saut de ligne "\n". Pour utiliser "\r\n", j'ai dû créer une constante de chaîne et l'utiliser à la place.

0
répondu ColinPBriggs 2017-01-15 23:11:31

premier sbUser.Appendline();

Deuxième sbUser.Append("texto loco ");

Voila!

=)

-3
répondu Rolo 2015-06-11 19:02:12