跟踪.写(字符串,字符串)和跟踪.WriteLine(string, string) don't按类别过滤

本文关键字:跟踪 string 字符串 过滤 WriteLine don | 更新日期: 2023-09-27 18:14:50

当使用Trace时。谁能告诉我为什么

Trace.Write(string message, string category) 

不将类别字符串传递给traceffilter,当方法

Trace.Write(object o, string category)

将类别字符串传递给ShouldTrace方法。下面是对Reflector中这两个方法的反编译。只是想知道为什么。net团队会在一个方法上做一些事情,而不是在另一个方法上。

public virtual void Write(object o, string category)
{
    if ((this.Filter == null) || 
 this.Filter.ShouldTrace(null, "", TraceEventType.Verbose, 0, category, null, o))
    {
        if (category == null)
        {
            this.Write(o);
        }
        else
        {
            this.Write((o == null) ? "" : o.ToString(), category);
        }
    }
}

,然后是string方法。

public virtual void Write(string message, string category)
{
    if ((this.Filter == null) || 
         this.Filter.ShouldTrace(null, "", TraceEventType.Verbose, 0, message))
    {
        if (category == null)
        {
            this.Write(message);
        }
        else
        {
            this.Write(category + ": " + ((message == null) ? string.Empty : message));
        }
    }
}

跟踪.写(字符串,字符串)和跟踪.WriteLine(string, string) don't按类别过滤

第一个重载中对this.Write的调用

this.Write((o == null) ? "" : o.ToString(), category);

将实际输出委托给第二个重载

public virtual void Write(string message, string category)

所有的输出格式都集中在第二个重载中:

this.Write(category + ": " + ((message == null) ? string.Empty : message));

通过以这种方式集中实际格式,在一个地方更改格式将更改所有跟踪输出格式。这是DRY原则的应用