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.
6 réponses
au Lieu de
sbUser.AppendLine();
Essayez d'utiliser
sbUser.Append(Environment.NewLine);
Je ne sais pas pourquoi cela fonctionne...
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);
}
}
}
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);
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);
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.
premier
sbUser.Appendline();
Deuxième
sbUser.Append("texto loco ");
Voila!
=)