【问题标题】:C# custom obsolete attributeC# 自定义过时属性
【发布时间】:2013-06-08 14:46:58
【问题描述】:

我想知道是否可以创建一个自定义的过时类。我需要它,我讨厌 Obsolete 在我输入之前显示此警告的事实:SOMETHING is Obsolete:。当我只使用我的输入的字段/方法时,我只想发出警告/错误,例如:

[CustomObsolete("Hello")]
public int i = 0;

会给出警告/调试Hello。

这可能吗?如果我使用#warning/#error,它总是会显示错误/警告。

【问题讨论】:

标签: c# attributes obsolete


【解决方案1】:

不,ObsoleteAttribute 被有效地硬编码到 C# 编译器中 - 无法创建您自己的属性,C# 编译器会理解为指示成员已过时。

就我个人而言,我会选择ObsoleteAttribute - 错误消息以“X 已过时”开头真的是糟糕吗?

【讨论】:

  • 我不是很喜欢它,但似乎没有其他选择。
【解决方案2】:

实现您想要的一种方法是自定义post-build task。编译项目后,让您创建的另一个程序加载此程序集并解析它以获取您的属性。然后你可以输出你想要的消息等等。但是输出使用此属性的确切行号和文件将是一项棘手的任务,因为为此您必须解析 pdb 文件(并且只能在调试模式下正常工作)。

您最好只使用 .NET 的 Obsolete 属性。 :-)

【讨论】:

    【解决方案3】:

    你只能使用过时的

    有错误

        [Obsolete("Hello", true)]
        public String foo() {
            return "bar";
        }
    

    并带有警告

        [Obsolete("Hello", false)]
        public String foo() {
            return "bar";
        }
    

    【讨论】:

    • 按照我的阅读方式,OP 知道 ObsoleteAttribute 但不喜欢报告错误的方式 - 在您的情况下:“foo is obsolete: 'Hello'”
    猜你喜欢
    • 2020-12-19
    • 2012-02-15
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多