C# 自定义属性和枚举数

C# 自定义属性和枚举数,c#,asp.net-mvc-2,enums,custom-attributes,C#,Asp.net Mvc 2,Enums,Custom Attributes,我有一个枚举: public enum Navigation { Top = 0, Left = 2, Footer = 3 } 我有一个控制器动作: public ActionResult Quotes() { return View(); } 我希望能够装饰我的行为如下: [Navigation.Top] public ActionResult Quotes() { return View(); } 如果想知道如何实现这一点,我可能必须创建一个自

我有一个枚举:

public enum Navigation
{
    Top = 0,
    Left = 2,
    Footer = 3
}
我有一个控制器动作:

public ActionResult Quotes()
{
    return View();
}
我希望能够装饰我的行为如下:

[Navigation.Top]
public ActionResult Quotes()
{
    return View();
}
如果想知道如何实现这一点,我可能必须创建一个自定义属性,但如何将此枚举合并到其中?

一种方法:

public static class Navigation{
  public class Top:ActionFilter /*any attribute*/{
   //magic
  }
  public class Left:ActionFilter{
   //magic
  }
}

[Navigation.Top]
public ActionResult Whatever(){}
如果您确实想使用枚举,恐怕无法将其用作属性。但您可以将其作为参数传递给属性。大概是这样的:

public class NavigationAttribute:Attribute{
  public Navigation Place {get;set;}
}

[Navigation(Place=Navigation.Top)]
public ActionResult Whatever(){}
一种方法:

public static class Navigation{
  public class Top:ActionFilter /*any attribute*/{
   //magic
  }
  public class Left:ActionFilter{
   //magic
  }
}

[Navigation.Top]
public ActionResult Whatever(){}
如果您确实想使用枚举,恐怕无法将其用作属性。但您可以将其作为参数传递给属性。大概是这样的:

public class NavigationAttribute:Attribute{
  public Navigation Place {get;set;}
}

[Navigation(Place=Navigation.Top)]
public ActionResult Whatever(){}

只能使用从
System.Attribute
class派生的类创建属性批注

因此,不可能直接使用
enum

但是,可以将枚举值传递给自定义属性的构造函数。像这样:

enum Navigation 
{
    Top = 0,
    Left = 2,
    Footer = 3,
}
class NavigationAttribute: Attribute
{
    Navigation _nav;
    public NavigationAttribute(Navigation navigation){
        _nav = navigation;
    }
}
...
[Navigation(Navigation.Top)]
public ActionResult Quotes()
{
    return View();
}

只能使用从
System.Attribute
class派生的类创建属性批注

因此,不可能直接使用
enum

但是,可以将枚举值传递给自定义属性的构造函数。像这样:

enum Navigation 
{
    Top = 0,
    Left = 2,
    Footer = 3,
}
class NavigationAttribute: Attribute
{
    Navigation _nav;
    public NavigationAttribute(Navigation navigation){
        _nav = navigation;
    }
}
...
[Navigation(Navigation.Top)]
public ActionResult Quotes()
{
    return View();
}

疯狂的。。。我做的差不多,但是,我没有继承ActionFilterAttribute。。。。谢谢你的帮助,这正是我需要的。。。我做的差不多,但是,我没有继承ActionFilterAttribute。。。。THANX对于帮助,这正是我所需要的THANX,这也是一个很好的解决方法。我想,如果您在其他地方使用enum,那么这样做更有意义。thanx,这也是一个很好的解决方法。我想,如果您在其他地方使用enum,那么这样做更有意义。