我可以通过属性向方法添加代码吗?

时间:2017-01-18 19:42:42

标签: c# annotations attributes

如果某个方法具有某个属性,我希望能够在方法的开头添加一些代码。例如,如果它具有特定属性并且它是星期三,我希望它立即返回:

[Return()]
public void MyMethod()
{
    //If [Return()] attribute and its Wednesday, it returns and never "Does Stuff"
    //Do Stuff
}

我的属性开始,但我无法弄清楚如何在方法之前运行代码。

[AttributeUsage(AttributeTargets.Method)]
public class ReturnAttribute : Attribute
{
     public void Return()
     {
         if(Today == Wednesday)
         {
             return;
         }
     {   
}

我知道ReturnAttribute不正确。我发布了该代码,以显示我已经接近(或远)。

如果该方法用指定的属性标记,如何在方法的开头插入代码?

1 个答案:

答案 0 :(得分:0)

编译时间解决方案

也许您可以尝试使用ConditionalAttribute,并设置一个永远不会成立的条件。例如....

[Conditional("NEVER")]
public static void MyMethod(int x)
{
    //This code will never run
}

这将具有您想要的效果,但仅限于编译时。请注意,这仅适用于返回void的方法。不知道你想要做什么来返回别的东西,因为你不想运行任何代码,因此无法实例化任何要返回的对象。

运行时间,切割&可粘贴的解决方案

在方法的顶部添加一些反射:

using System.Reflection;
using System.Linq;

[Return()]
void MyMethod(int x)
{
    var skip = MethodBase.GetCurrentMethod().GetCustomAttributes( typeof( ReturnAttribute ), false ).Any();
    if (skip) return;
    //Rest of the code goes here
}