【问题标题】:Attribute using method name使用方法名的属性
【发布时间】:2012-12-05 02:36:58
【问题描述】:

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

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

}

public static void Something()
{

}

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

    }
}

【问题讨论】:

  • 我可以回退到使用字符串,但更喜欢使用编译时间来验证类型是否正确。 => C# 6 引入了 nameof 表达式,给你一个字符串但使用编译器/重构。支持。msdn.microsoft.com/nl-be/library/dn986596.aspx

标签: c# reflection attributes


【解决方案1】:

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

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

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

【讨论】:

  • 干杯,这会工作,但我想我会去传递类型(作为类型)和方法名称作为字符串。我只是在启动时处理属性,所以可以通过反射处理到 MethodInfo 中。
【解决方案2】:

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

虽然效率不高,但验证它也需要一些工作,这会让您怀疑属性是否是正确的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2011-05-28
    • 2014-05-30
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多