使用方法名称的属性

时间:2012-12-17 22:55:54

标签: c# reflection attributes

我想你不能但是有没有办法将方法作为属性的参数引用?即像下面的东西?我可以回退使用字符串,但更喜欢使用编译时间来验证类型是否正确。

[LinkToAction(Something)]
public void SomethingElse()
{

}

public static void Something()
{

}

public class LinkToActionAttribute : Attribute
{
    public LinkToActionAttribute(MethodInfo info)
    {

    }
}

2 个答案:

答案 0 :(得分:2)

抱歉,但你不能。只是这些可以作为属性的参数传递:

  • 以下类型之一:bool,byte,char,double,float,int,long,short,string。
  • 类型对象。
  • 类型System.Type。
  • 枚举类型,前提是它具有公共可访问性,并且嵌套类型(如果有)也具有公共可访问性。
  • 上述类型的一维数组。

此问题与您的问题类似:Is it possible to have a delegate as attribute parameter?。在那里,有一个可用的解决方法。

答案 1 :(得分:0)

不是直接没有。 您可以将其作为字符串传递,然后使用反射生成MethodInfo,或者更好的是,使用LinkedFrom和LinkedTo属性标记方法。

虽然效率不高,但验证它也会有一些工作,这会让你想知道属性是否是正确的解决方案。