0

我想创建一种方法来替换用于预期目标用途的分隔符(html 电子邮件、日志、数据库)。分隔符是恒定的,所以我希望能够引用一个将可识别名称映射到字符串值的对象(分号 = “;”、htmlLineBreak = “<br/>”等)。有没有比下面更好的方法来做到这一点?

public static class Utilities
{
    public string ReplaceDelimiter(string content
                     , Delimiter currentDelimiter, Delimiter outputDelimiter)
    {
        return content.Replace(currentDelimiter.ToString()
                              , outputDelimiter.ToString());
    }
}

public class Delimiter
{
    public const string comma = ",";
    public const string semicolon = ";";
    public const string colon = ":";
    public const string lineBreak = "\r\n";
    public const string htmlLineBreak = "<br/>";
}

编辑以下评论:
一个用例是当我想将错误记录到不同的目标并在电子邮件中发送相同的内容(格式不同)。日志可能会转到数据库列(希望带有分号分隔符的键/值)或日志文件(希望分隔符是换行符)。电子邮件将是 HTML,因此希望将分隔符替换为 <br/>。

下面是一个日志记录方法的摘录,它有一些参数,包括实际的异常:

StringBuilder delimitedMessage = new StringBuilder();

delimitedMessage.Append("Date=" + DateTime.Now.ToShortDateString() + ";");
delimitedMessage.Append("Time=" + DateTime.Now.ToLongTimeString() + ";");
delimitedMessage.Append("Source=" + objException.Source.ToString().Trim() + ";");
delimitedMessage.Append("Method=" + objException.TargetSite.Name.ToString() + ";");
delimitedMessage.Append("Erring Method=" + methodName + ";");
delimitedMessage.Append("Computer=" + System.Environment.MachineName.ToString() + ";");
delimitedMessage.Append("Log Message=" + logMessage + ";");
delimitedMessage.Append("Exception Error=" + objException.Message.ToString().Trim() + ";");
delimitedMessage.Append("Severity=" + severity.ToString() + ";");
delimitedMessage.Append("Stack Trace=" + objException.StackTrace.ToString().Trim() + ";");

contentToLog = delimitedMessage.ToString();

WriteToDb(contentToLog);
WriteToLog(Utilities.ReplaceDelimiter(contentToLog, Delimiter.semicolon, Delimiter.lineBreak));
SendEmail(Utilities.ReplaceDelimiter(contentToLog, Delimiter.semicolon, Delimiter.htmlLineBreak));
4

1 回答 1

1
  • 代码

    public class Delimiter {
        public static readonly Delimiter
            HtmlLineBreak=new Delimiter {
                Value="<br/>"
            },
            LineBreak=new Delimiter {
                Value="\r\n"
            },
            Semicolon=new Delimiter {
                Value=";"
            },
            Colon=new Delimiter {
                Value=":"
            },
            Comma=new Delimiter {
                Value=","
            };
    
        public override String ToString() {
            return Value;
        }
    
        public String Value {
            get;
            set;
        }
    }
    
  • 测试

    var t=Utilities.ReplaceDelimiter("123\r\n", Delimiter.LineBreak, Delimiter.HtmlLineBreak);
    Debug.Print("{0}", t);
    
  • 输出

    123<br/>

于 2013-03-06T18:10:24.827 回答