using System; [My((long)1)] [My(TypeCode.Empty)] [My(typeof(System.Enum))] class T { public static int Main() { object[] a = Attribute.GetCustomAttributes (typeof (T), false); if (a.Length != 3) return 1; foreach (object o in a) { My attr = (My)o; if (attr.obj.GetType () == typeof (long)) { long val = (long) attr.obj; if (val != 1) return 2; } else if (attr.obj.GetType () == typeof (TypeCode)) { TypeCode val = (TypeCode) attr.obj; if (val != TypeCode.Empty) return 3; } else if (attr.obj.GetType ().IsSubclassOf (typeof (Type))) { Type val = (Type) attr.obj; if (val != typeof (System.Enum)) return 4; } else return 5; } object[] ats = typeof(T).GetMethod("Login").GetCustomAttributes (typeof(My), true); My at = (My) ats[0]; if (at.Val != AnEnum.a) return 6; return 0; } [My(1, Val=AnEnum.a)] public void Login(string a) {} } [AttributeUsage(AttributeTargets.All,AllowMultiple=true)] class My : Attribute { public object obj; public My (object o) { obj = o; } public AnEnum Val; } public enum AnEnum { a,b,c }