C#自定义过时属性

时间:2013-06-12 13:07:28

标签: c# attributes obsolete

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

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

将发出警告/调试Hello。

这可能吗?如果我使用#warning / #error,它将始终显示错误/警告。

3 个答案:

答案 0 :(得分:9)

不,ObsoleteAttribute实际上是硬编码到C#编译器中 - 没有办法创建自己的属性,C#编译器会理解这个属性表明成员已经过时了。

就我个人而言,我只是选择ObsoleteAttribute - 错误消息以“X已过时”开头是 错了吗?

答案 1 :(得分:2)

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

你最好坚持使用.NET的Obsolete属性。 : - )

答案 2 :(得分:0)

你只能使用过时的

有错误

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

并发出警告

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