How to write a code with expiration date?

Mark the code with the System.ObsoleteAttribute attribute, you'll get a compiler warning, which will nag you to fix the code

[Obsolete("You've an ugly hack here")]
public void MyUglyHack()
{
...
}

Alternatively . . .

Write your own attribute, passing it an expiration date on the constructor, in the constructor throw an exception if DateTime.Now >= expirationDate.

The compile will fail until you fix the code (or more likely increase the expiration date, or far more likely you just remove the Attribute.


oooohhh - this is 'orrible. try this for a giggle:

[AttributeUsage(AttributeTargets.All)]
public class BugExpiryAttribute : System.Attribute
{
    // don't tell 'anyone' about this hack attribute!!
    public BugExpiryAttribute(string bugAuthor, string expiryDate)
    {
        DateTime convertedDate = DateTime.Parse(expiryDate);
        Debug.Assert(DateTime.Now <= convertedDate, 
            string.Format("{0} promised to remove this by {1}", 
                bugAuthor, convertedDate.ToString("dd-MMM-yyyy")));
    }
}

then, decorate your method/class etc:

[BugExpiryAttribute("Jack Skit", "2011-01-01")]
public static void Main(string[] args)
{
...
}

... nasty :-)

[DISCLAIMER] - created in the name of academic interest, not production code finese!!

[edit] - just to clarify, code compiled and in production will continue to run on/after the 'bugExpriryDate'. only once the code is run in the compiler (on/after the date), will the warning message be raised (debug.assert). just thought it worth making that distinction - cheers MartinStettner.

[caveat] - if used in classes/methods etc would need to be read via reflection. however (and this is interesting) will work straight off in the compiler if used on sub Main(). how strange!! (thanks for the nod Hans...)


I think this is the reason Visual Studio has a Task List. Add the comment:

\\ TODO: Fix this spaghetti by 01APR11

and it will show up like this

Task List Pane.

the keywords are configurable from the options

Task List Options