次のクラスを検討してください。
public class Transition<TState>
{
public Transition ()
{
if (!typeof(TState).IsEnum)
throw (new ArgumentException("[TState] has to be of type [System.Enum]."));
}
}
理想的には、これは次のように宣言する必要があります。
public class Transition<TState> where TState: System.Enum
{
}
もちろん、上記はコンパイル時エラーを生成します。私の質問は、なぜそれが違法になったのかということです。ほとんどの情報源は、それが違法であると説明していますが、その理由は説明していません. 何かご意見は?