C# 为什么`Trace.Writeline()`缺少`Writeline(字符串格式,参数对象[]args)`重载?
具有具有以下签名的重载: 公共静态void WriteLinestring格式,参数对象[]args 不具有该重载,尽管它具有Debug.WriteLine所具有的所有其他重载 有人知道这一遗漏的原因吗 我想我自己也没有理由回避它吧?我之所以问这个问题,是因为我正在实现一个日志接口,默认实现将只使用Debug.WriteLine和Trace.WriteLine,我想知道任何奇怪的结果。不过我无法想象。好吧,我不确定我说了什么,但我冒了一次险 当我反编译这些方法时,它们都使用相同的TraceInternal.WriteLinestring方法 当我反编译Debug.WriteLine方法字符串时,对象[] 当我反编译Trace.WriteLinestring时 正如您所看到的,唯一的区别是,第一个使用string.format方法。看起来对我来说没什么大不了的 但为什么会有遗漏呢?我不知道。作为ken2k,我相信这只能由基类库开发人员来回答。好吧,我不确定我说了什么,但我冒了一次险 当我反编译这些方法时,它们都使用相同的TraceInternal.WriteLinestring方法 当我反编译Debug.WriteLine方法字符串时,对象[] 当我反编译Trace.WriteLinestring时 正如您所看到的,唯一的区别是,第一个使用string.format方法。看起来对我来说没什么大不了的C# 为什么`Trace.Writeline()`缺少`Writeline(字符串格式,参数对象[]args)`重载?,c#,.net,C#,.net,具有具有以下签名的重载: 公共静态void WriteLinestring格式,参数对象[]args 不具有该重载,尽管它具有Debug.WriteLine所具有的所有其他重载 有人知道这一遗漏的原因吗 我想我自己也没有理由回避它吧?我之所以问这个问题,是因为我正在实现一个日志接口,默认实现将只使用Debug.WriteLine和Trace.WriteLine,我想知道任何奇怪的结果。不过我无法想象。好吧,我不确定我说了什么,但我冒了一次险 当我反编译这些方法时,它们都使用相同的TraceInt
但为什么会有遗漏呢?我不知道。作为ken2k,我相信这只能由基类库开发人员来回答。我发现了一个不应该在我自己的代码中添加这样一个接口的原因:因为它具有误导性 乍一看,我认为 Debug.WriteLineValue={0},Test 将打印: 值=测试 但事实上,它打印的是: 测试:值={0} 这之所以具有误导性,是因为有太多类似的方法可以进行类似的格式化,例如string.Format、Console.WriteLine等等 所以真的,应该避免这种误导性的功能,伊姆霍 这并没有直接回答我最初的问题,但它解释了为什么该方法最初不在.Net中。这并不能解释为什么他们在以后的版本中添加了它。我现在认为他们不应该这样做
我现在通过复制NLog的功能来规避代码中的问题-我要求通过工厂方法将类名传递给日志类的构造函数,这样就不会将类名传递给任何消息格式化程序。我发现了一个不应该在我自己的代码中添加这样一个接口的原因:因为这会产生误导 乍一看,我认为 Debug.WriteLineValue={0},Test 将打印: 值=测试 但事实上,它打印的是: 测试:值={0} 这之所以具有误导性,是因为有太多类似的方法可以进行类似的格式化,例如string.Format、Console.WriteLine等等 所以真的,应该避免这种误导性的功能,伊姆霍 这并没有直接回答我最初的问题,但它解释了为什么该方法最初不在.Net中。这并不能解释为什么他们在以后的版本中添加了它。我现在认为他们不应该这样做
我现在通过复制NLog的功能来规避代码中的问题-我要求通过工厂方法将类名传递给日志类的构造函数,这样,就不会将类名传递给任何消息格式化程序。我有一个BCL设计师/开发人员的想法,他在10年前就做过这个工作,读了这个问题,笑了。疯狂地笑。是的,这不会让我感到惊讶要么他们从未想过要加上它,要么他们懒得花时间。调用string.Format并将结果传入,或者使用所需的签名编写自己的方法,将格式化的结果传递给跟踪。我们不太可能知道其他人选择的具体原因,当然我们也不是能够改变BCL的人。@Servy:我就是这么做的。在本例中,我只是为NLog编写了一个日志包装器,但默认实现只写入Debug.WriteLine和Trace.WriteLine,这就是我遇到这个问题的原因。我不希望有任何真正的原因,但我只是想以防万一。事实上,Debug.WriteLinestring,object[]重载是在4.0中才添加的:所以可能是3年前的BCL开发人员:我有一个BCL设计师/开发人员的愿景,他在10年前就做过这个工作,读了这个问题,笑了。疯狂地笑。是的,这不会让我感到惊讶要么他们从未想过要加上它,要么他们懒得花时间。调用string.Format并传入结果,或者写入
您自己的方法,带有所需的签名,该签名将格式化结果传递给跟踪。我们不太可能知道其他人选择的具体原因,当然我们也不是能够改变BCL的人。@Servy:我就是这么做的。在本例中,我只是为NLog编写了一个日志包装器,但默认实现只写入Debug.WriteLine和Trace.WriteLine,这就是我遇到这个问题的原因。我不希望有任何真正的原因,但我只是想以防万一。事实上,Debug.WriteLinestring,object[]重载是在4.0中才添加的:所以可能是3年前的BCL开发人员:虽然这是真的,但问题更多的是关于IMO遗漏的原因。尽管如此,我想无论如何只有BCL开发人员可以回答…@ken2k你完全正确。我不知道遗漏的部分。是的,说实话,我本来可以把这个问题措辞得更好。我很担心他们为什么省略它,我是否有理由也省略它。事实证明,在IMO中不提供特定的方法签名是有原因的——请参阅我编辑的问题。虽然这是事实,但问题更多的是关于IMO遗漏的原因。尽管如此,我想无论如何只有BCL开发人员可以回答…@ken2k你完全正确。我不知道遗漏的部分。是的,说实话,我本来可以把这个问题措辞得更好。我很担心他们为什么省略它,我是否有理由也省略它。事实证明,在IMO中不提供特定的方法签名是有原因的——请参阅我编辑的问题。
public static void WriteLine(string format, params object[] args)
{
TraceInternal.WriteLine(string.Format((IFormatProvider) CultureInfo.InvariantCulture, format, args));
}
public static void WriteLine(string message)
{
TraceInternal.WriteLine(message);
}