2013-06-12 6 views
7

Ich habe mich gefragt, ob es möglich ist, eine benutzerdefinierte obsolete Klasse zu erstellen. Ich brauche es und ich hasse die Tatsache Veraltet zeigt diese Warnung vor meiner Eingabe: ETWAS ist veraltet :. Ich möchte nur eine Warnung/Fehler geben, wenn ich das Feld/Methode mit meiner Eingabe nur, so zum Beispiel:C# benutzerdefiniertes veraltetes Attribut

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

Wird Warnung/debug gibt Hallo.

Ist das möglich? Wenn ich # warning/# error benutze, wird IMMER der Fehler/die Warnung angezeigt.

+0

jon ist richtig, auch wenn Sie möchten, können Sie dies überprüfen http://www.dotnetperls.com/obsolete oder http://www.codeproject.com/Articles/107103/Use -Obsolete-attributes-to-indicate-Obsolete-Metho – terrybozzio

+0

Ich habe mich gefragt, weil ich ein benutzerdefiniertes Attribut möchte, das eine Warnung mit der gewünschten Eingabe ausgibt. Aber ich denke, ich werde einfach mit Obsolete gehen. –

Antwort

6

Nein, ObsoleteAttribute ist effektiv in den C# -Compiler hart-codiert - es gibt keine Möglichkeit, ein eigenes Attribut zu erstellen, das der C# -Compiler als Hinweis darauf verstehen wird, dass ein Element veraltet ist.

Persönlich würde ich nur mit ObsoleteAttribute gehen - ist es wirklich , dass schlecht, dass die Fehlermeldung beginnt mit "X ist veraltet"?

+0

Ich mag es nicht wirklich, aber es scheint, dass es keine andere Möglichkeit gibt. –

0

Sie können

mit Fehler nur veraltete verwenden

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

und mit Warn

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

So wie ich es gelesen habe, ist das OP über ObsoleteAttribute informiert, mag aber nicht die Art, wie der Fehler gemeldet wird - in Ihrem Fall: "foo ist veraltet: 'Hallo'" –

2

Ein Weg, um zu erreichen, was Sie wollen, wäre eine benutzerdefinierte post-build task. Nachdem Ihr Projekt kompiliert wurde, lassen Sie ein anderes von Ihnen erstelltes Programm diese Assembly laden und analysieren Sie sie für Ihr Attribut. Sie könnten dann die Nachricht ausgeben, die Sie und noch mehr weben. Aber die genaue Zeilennummer und die Datei, in der dieses Attribut verwendet wird, auszugeben, ist eine knifflige Aufgabe, weil Sie dafür die PDB-Datei parsen müssen (und nur im Debug-Modus arbeiten würden).

Sie sollten besser nur auf das Obsolete Attribut von .NET bleiben. :-)