using System; [My((long)1)] [My(TypeCode.Empty)] [My(typeof(System.Enum))] class T { 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; Console.WriteLine ("got value: {0}", val); if (val != 1) return 2; } else if (attr.obj.GetType () == typeof(TypeCode)) { int val = (int)attr.obj; if (val != (int)TypeCode.Empty) return 3; } else { Type t = attr.obj as Type; if (t == null) return 4; if (t != typeof (System.Enum)) return 5; } } return 0; } } [AttributeUsage(AttributeTargets.All,AllowMultiple=true)] class My : Attribute { public object obj; public My (object o) { obj = o; } }