Why is a Nullable<T> not a valid Custom Attribute Parameter when T is?

Viewed 10519

If I have an enum like this

public enum Hungry
{
    Somewhat,
    Very,
    CouldEatMySocks
}

and a custom attribute like this

public class HungerAttribute : Attribute
{
    public Hungry HungerLevel { get; set; }
    public Hungry? NullableHungerLevel { get; set; }
}

I can do this

[Hunger(HungerLevel = Hungry.CouldEatMySocks)]
public class Thing1

but I can't do this

[Hunger(NullableHungerLevel = Hungry.CouldEatMySocks)]
public class Thing2

It generates an error that says "'NullableHungerLevel' is not a valid named attribute argument because it is not a valid attribute parameter type".

Why is that not allowed? I understand that fundamentally it just isn't on the list of accepted types. The valid types seem to be primitives, enums, string, type, and one dimensional arrays of the preceding types.

Is this just an old rule that did not get updated when Nullable came along?

4 Answers
Related