12

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

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

会给出警告/调试你好。

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

4

3 回答 3

10

不,ObsoleteAttribute实际上是硬编码到 C# 编译器中 - 无法创建您自己的属性,C# 编译器将理解为指示成员已过时。

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

于 2013-06-12T13:10:06.663 回答
3

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

您最好只坚持Obsolete.NET 的属性。:-)

于 2013-06-12T13:17:48.710 回答
1

你只能使用过时的

有错误

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

并警告

    [Obsolete("Hello", false)]
    public String foo() {
        return "bar";
    }
于 2013-06-12T13:10:42.110 回答