我试图从MailMessage对象的Subject属性中消除某些符号。我正在经历的是它什么也没做。即使在将Subject分配给字符串并进行修剪后,最后的Subject仍具有符号。 (未在示例中显示)

MailMessage mailMessage = new MailMessage
{
    From = new MailAddress(mail.SenderEmailAddress),
    SubjectEncoding = System.Text.Encoding.UTF8,
    Subject = mail.Subject.Trim(new char[] {}), //symbol list, like ":", "~", ">"
    Body = mail.Body
};

String path = @"C:\Users\" + Environment.UserName + @"\Documents\EML\";

if (!Directory.Exists(path))
{
    Directory.CreateDirectory(path);
}

path = @"C:\Users\" + Environment.UserName + @"\Documents\EML\"
    + mailMessage.Subject + ".eml";

MessageBox.Show(path);


消息框仅用于查看符号是否已被删除,path稍后将被放入方法中。


  邮件的主题为RE: dog.Trim尝试删除:
  
  MessageBox显示C:\Users\user\Documents\EML\RE: dog.eml

最佳答案

从MSDN:


  String.Trim方法()-从当前String对象中删除所有前导和尾随空格字符。


因此,Trim不会从字符串中间删除字符。评论者建议改为使用“替换”,但没有一个像您使用的那样采用字符数组的签名。一种简单的解决方法是扩展方法。

    class Program
    {

        static void Main(string[] args)
        {
            string text = "This:is~a>test";
            string subject = text.ReplaceFromCollection(new char[] { ':', '~', '>'}); //symbol list, like ":", "~", ">"

            Console.WriteLine($"{text}\n{subject}");
            Console.ReadLine();
        }

    }

    static class Extensions
    {
        public static String ReplaceFromCollection(this string text, IEnumerable<char> characters)
        {
            foreach (var chr in characters)
            {
                text = text.Replace(chr.ToString(), String.Empty);
            }
            return text;
        }
    }


使用此方法,字符串中与数组中的字符匹配的每个字符都将被一个空字符串替换为空。然后将结果传回。

More reading关于扩展方法。

关于c# - C#String.Trim()不能从MailMessage.Subject中删除字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48732543/

10-12 22:46
查看更多