use warnings;
warn "Non-fatal error condition, printed to stderr.";
这在C# ASP.NET中的等效物是什么?具体来说,我正在寻找的是其他团队成员可以知道他们是否仍在使用已弃用的例程。它应该在代码路径实际被触发时显示,而不是在编译时(否则,他们将收到有关代码坐在兼容性层上的警告,这些代码本来就不应该运行)。到目前为止,我最好的选择是使用Trace,但感觉像是一个糟糕的hack。
use warnings;
warn "Non-fatal error condition, printed to stderr.";
使用ObsoleteAttribute。将其放置在任何你想要标记为不建议使用的方法上面。这样,他们会在错误窗口中收到警告,但应用程序仍然可以编译。
public class Thing
{
[Obsolete]
public void OldMethod() { Console.WriteLine("I'm Old"); }
}
编辑:我没有看到问题中说您希望在执行时进行。
写出数据执行时间的问题在于需要知道在哪里写入。你的应用程序通常使用什么日志记录形式?基本上使用相同形式的日志记录。
然而,我仍然更喜欢下面列出的编译时选项——您可以使用#pragma warn disable/restore
关闭兼容层中的特定警告,但这将使问题更容易被发现,而不是希望有人读取日志文件...
旧答案
对于任何类型或成员,请使用[Obsolete]
属性。您可以决定这是否应该成为警告或错误。例如:
using System;
class Test
{
static void Main()
{
OldMethod();
BadMethod();
}
[Obsolete("Use something else instead")]
static void OldMethod() {}
[Obsolete("This would destroy your machine!", true)]
static void BadMethod() {}
}
理想情况下,该消息应解释继续使用该方法的影响以及建议使用的替代方法。Test.cs(7,9): 警告 CS0618: 'Test.OldMethod()' 已过时: '请使用其他方法' Test.cs(8,9): 错误 CS0619: 'Test.BadMethod()' 已过时: '此方法将破坏您的计算机!'
Trace.TraceWarning
来检测运行时过时方法的使用,但是您真的应该重新考虑您的设计并使用 ObsoleteAttribute
和编译时检测。[Obsolete]
,以便新代码不会调用它们。#pragma warning disable 618
当编译兼容层时,这将隐藏过时的警告。由于您的兼容层方法也标记为 [Obsolete],因此您将在正确的位置收到警告。
您需要了解的是,有一种#warning指令可以用于运行时警告生成; 然而,[Obsolete]属性更符合您的需求。
没有与warn
的__WARN__
处理相对应的内容,但可以通过简单的Console.Error.WriteLine()
调用打印到STDERR。
话虽如此,你真正想做的是标记某些内容已过时或不建议使用,其他人已经向你展示了如何做到这一点。请使用该方法,而不是将警告调用插入到函数中。
我认为Trace
类是你最好的选择。根据你想要多么侵入性,你可以使用不同的跟踪级别甚至是Fail
语句(这会弹出令人讨厌的断言对话框)。
private void SomeOldMethod()
{
Trace.Fail("You shouldn't call this method"); // <-- this will bring up an assert dialog
Trace.TraceWarning("You shouldn't call this method");
Trace.TraceError("You shouldn't call this method");
}
在C#中标记方法为已弃用的方法是使用过时的属性,该属性被重载以输出消息(在智能感知中)和布尔值,以确定是否允许编译。但我并不完全确定这是否符合您的要求,因为我对Perl不熟悉。
[Obsolete("A message",false)]