C# Trace.Write(string,string)和Trace.WriteLine(string,string)don';按类别筛选

C# Trace.Write(string,string)和Trace.WriteLine(string,string)don';按类别筛选,c#,.net,logging,C#,.net,Logging,当使用Trace.Listener时,有人能告诉我为什么 Trace.Write(string message, string category) 当方法调用时,不将类别字符串传递给TraceFilter Trace.Write(object o, string category) 将类别字符串传递给ShouldTrace方法。下面是来自Reflector的两种方法的反编译。只是想知道为什么.NET团队会在一种方法上做一些事情,而不是在另一种方法上 public virtual void

当使用Trace.Listener时,有人能告诉我为什么

Trace.Write(string message, string category) 
当方法调用时,不将类别字符串传递给TraceFilter

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));
        }
    }
}

在第一个重载中调用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));

通过以这种方式集中实际格式,在单个位置更改格式将更改所有跟踪输出格式。这是一个应用程序。

我们怎么知道原因呢?这两个方法对同一个方法使用了两个不同的重写,这就是导致不同行为的原因。我希望有人比我更了解这种不一致性。谢谢你的评论。措辞和格式都很好的问题