Una specie di wrapper si potrebbe utilizzare quando si ha bisogno di un "attributo enumerato"
using System;
public enum FooEnum
{
  Foo1,
  Foo2
}
public class FooAttribute: Attribute
{
  private FooEnum _foo;
  public FooEnum Foo
  {
    get
    {
      return _foo;
    }
  }
  public FooAttribute(FooEnum foo)
  {
    _foo = foo;
  }
  public static readonly FooAttribute Foo1 = new FooAttribute(FooEnum.Foo1);
  public static readonly FooAttribute Foo2 = new FooAttribute(FooEnum.Foo2);
} 
Da notare i due campi statici e in sola lettura,  Foo1 e Foo2, che corrispondono ai valori del tipo enumerato. Fanno la ricerca dell'attributo, più usabile:  
IList attributes = typeof(Bar).GetCustomAttributes(false);
if (attributes.Contains(FooAttribute.Foo2))
{
  //
} 
dove, per esempio, abbiamo:
[Foo(FooEnum.Foo2)]
class Bar
{
  //
} 
Un esempio nel framework? L'attributo System.ComponentModel.DesignerSerializationVisibilityAttribute.