Nella documentazione della proprietà IsClass della classe System.Type, c'è scritto:
"Gets a value indicating whether the Type is a class; that is, not a value type or interface"
E' vero che gli insiemi {ValueType}, {Interface} e {Class} sono disgiunti però esiste un tipo t che non fa parte né dal {ValueType}, né dall'{Interface}, né dal {Class}, cioè l'espressione !t.IsClass && !t.IsValueType && !t.IsInterface è true. Questo tipo è System.Enum di cui ho parlato in un altro post, sempre oggi.
Vediamo come si potrebbe correggere la definizione. Innanzitutto, cos'è un tipo?
"type declarations: class types, interface types, array types, value types, and enumeration types"
In questo caso gli array non ci interessano mentre l'insieme {Enumeration} è incluso nell'insieme {ValueType} - attenzione qui: System.Enum non fa parte dall'{Enumeration}. Vedete come l'errore si propaga? Dovevano forse dire:
type declarations: class types, interface types, array types, value types, and enumeration types the type System.Enum.
e poi:
Gets a value indicating whether the Type is a class; that is, not a value type or interface or System.Enum
Lo so che suona stranissimo... Tutto il casino è nato dal fatto che System.Enum (un reference type!) deriva ("is-a-kind-of") da System.ValueType