2009-03-11 8 views
3

Possible en double:
Why are C# collection-properties not flagged as obsolete when calling properties on them?ObsoleteAttribute confusion

Je voudrais demander ObsoleteAttribute à une propriété, mais il semble que le compilateur génère des avertissements/erreurs uniquement pour une utilisation directe de l'attribut, tout l'utilisation indirecte est silencieusement ignorée.

Je pense que l'exemple suivant illustre très bien le problème:

using System; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     var o = new Old(); 
     Console.WriteLine(o.Geezer); // compilation fails: 'ObsoleteAttributeTest.Program.Old.Geezer' is obsolete: 'Some error' 
     Console.WriteLine(o.Geezer.Attributes); // compiles OK 
    } 

    class Old 
    { 
     [ObsoleteAttribute("Some error", true)] 
     public System.Xml.XmlElement Geezer { get { return null; } } 
    } 
} 
+0

Appuyée; MS lien: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=417159 –

+0

3 minutes, c'est impressionnant, merci les gens! Désolé soumettre double:/ – dolzenko

+0

Réponse officielle: http://stackoverflow.com/questions/577132/why-are-c-collection-properties-not-flagged-as-obsolete-when-calling-properties/652824#652824 –

Répondre

0

var o = new Vieux(); renvoie une erreur erreur CS0246: Le nom du type ou espace de noms « var » n'a pas pu être trouvée (vous manque une directive à l'aide ou une référence d'assemblage?) Si nous changeons cela comme Old o = new Old(); encore la deuxième ligne comme erreur lancers francs erreur CS0619: « Program.Old.Geezer » est obsolète: « Une erreur » . Je reçois ce qui se passe ici .. !!!!!!!!!!

+0

J'aurais dû indiquer que j'utilise la dernière version du compilateur C#. Vous utilisez 2.0 ou même quelque chose de plus ancien, vérifiez ce message (lié ci-dessus aussi, btw) http://stackoverflow.com/questions/577132/why-are-c-collection-properties-not-flagged-as-obsolete -when-calling-properties/577152 # 577152 – dolzenko