代码之家  ›  专栏  ›  技术社区  ›  sorpigal

perl warn的C#等价物是什么?

c#
  •  5
  • sorpigal  · 技术社区  · 14 年前

    用Perl我可以说

    use warnings;
    warn "Non-fatal error condition, printed to stderr.";
    

    7 回复  |  直到 14 年前
        1
  •  2
  •   Ray Burns    14 年前

    你可以用 Trace.TraceWarning ObsoleteAttribute

    运行时检测此类错误应该是最后的手段。

    • 如果兼容层使用反射,它可以检查ObsoleteAttribute并发出警告。
    • 如果您的兼容层是手工编码的,您可以编写一个工具,自动检查兼容层中的IL,并根据调用的方法将兼容层方法标记为[过时]。

    在每种情况下,最好是所有过时的方法都用 [Obsolete]

    #pragma warning disable 618
    

    这将在编译兼容层时隐藏过时的警告。由于您的兼容层方法也被标记为[过时],您将在正确的位置收到警告。

        2
  •  6
  •   David Morton    14 年前

    使用 ObsoleteAttribute . 用任何你想标记为不推荐的方法装饰它。他们将在错误窗口中得到警告,但应用程序仍将编译。

    public class Thing
    {
         [Obsolete]
         public void OldMethod() { Console.WriteLine("I'm Old"); }
    }
    
        3
  •  4
  •   Jon Skeet    14 年前

    编辑:我没有看到问题中说你在执行时想要它。

    不过,我仍然支持下面列出的编译时选项-您可以使用 #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() {}
    }
    

    编辑此文件可提供:

    测试cs(7,9):警告CS0618: 而不是别的东西’ 测试cs(8,9): 错误CS0619:“Test.BadMethod()”无效 过时:“这会毁了你的生活。”

    理想情况下,信息应解释继续使用该方法的影响,以及建议的替代方案。

        5
  •  2
  •   Randolpho    14 年前

    没有等同于 warn __WARN__ 处理,但打印到STDERR可以通过简单的 Console.Error.WriteLine() 呼叫

    也就是说,你真正想做的是标记一些过时或不推荐的东西,其他人已经向你展示了如何做到这一点。用那种方法 相当地

        6
  •  1
  •   dkackman Srinivas Kokkula    14 年前

    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");
    }
    
        7
  •  0
  •   Pharabus    14 年前

    [Obsolete("A message",false)]