我想知道是否可以创建一个自定义的过时类。我需要它并且我讨厌在我输入之前Obsolete出现这个警告的事实:SOMETHING已经过时了:我只想在仅使用输入的字段/方法时发出警告/错误,例如:
[CustomObsolete("Hello")]
public int i = 0;
将发出警告/调试Hello。
这可能吗?如果我使用#warning / #error,它将始终显示错误/警告。
答案 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";
}