Is there a general approach to enums within enums?
<p><em>Disclaimer. I'm not sure if the title is the best one. I couldn't think of a better one that wasn't miles long. Please feel free to suggest an improvement.</em></p>

<p>When a programmer is designing a set of states, it's natural to apply enumerations. In case of e.g. weekdays, it's obvious, traditionally accepted and straight-forward. However, sometimes, we also need to set the reason of the status as e.g. task management. We can have states as follows:</p>

<pre><code>enum Status { New, Active, Inactive }
</code></pre>

<p>but still require to have a <strong>status of the status</strong>, a <strong>stage of the status</strong> or maybe a <strong>reason of the status</strong>. Normally, I'd add a bunch of new enumeration like so:</p>

<pre><code>enum StatusOfNew { UnseenYet, RefusedToEvenLookAtAndOrQuitTheJob }
enum StatusOfActive { Assigned, Commenced, BeingTested }
enum StatusOfInactive { Done, Trashed, GivenUpOnBecausePeopleKeepQuittingTheJob }
</code></pre>

<p>An alternative approach would be to have a long list of all the combinations in the following way.</p>

<pre><code>enum Status
{ 
  New_UnseenYet, New_RefusedToEvenLookAtAndOrQuitTheJob,
  Active_Assigned, Active_Commenced, Active_BeingTested,
  Inactive_Done, Inactive_Trashed, Inactive_GivenUpOnBecausePeopleKeepQuittingTheJob
}
</code></pre>

<p>Then, we have the classy approach, where each state is its own type with a common superclass and specific stages/reasons.</p>

<pre><code>class New : Status
{
  enum Reason
  {
    UnseenYet,
    RefusedToEvenLookAtAndOrQuitTheJob
  }
}
</code></pre>

<p>I can wage them against each other considering the relation between complexity of implementation, cost of maintenance and gain in robustness. However, I wonder if there's other methods to consider, syntaxes to apply or approaches that void the problematic all together.</p>

<p><em>Mainly, as a MS monkey I want to see a language specific solution in C#. However, being a curious and open-minded creature, I'd welcome suggestions from other lingos, as well. I've tried to ask this question on Programmers but, apparently, my questions are too dumb and the site told me to duck off (no profanity intended, the typo is intentional and I love ducks).</em></p>