创建C#属性以禁止方法执行
作者:互联网
我希望创建一个自定义属性来抑制在C#中执行方法,即使它被调用.
例如,在下面的代码块中,如果方法具有“跳过”属性,即使从Main调用它也不应该执行.
public class MyClass {
public static void main()
{
aMethod();
}
[Skip]
public void aMethod() {
..
}
}
如何使用C#中的反射来实现这一目标?
在下面的代码片段中,我设法提取了带有Skip属性的方法,我无法弄清楚如何阻止它们执行!
MethodInfo[] methodInfos = typeof (MyClass).GetMethods();
foreach (var methodInfo in methodInfos)
{
if (methodInfo.HasAttribute(typeof(SkipAttribute)))
{
// What goes here ??
}
}
我们非常欢迎任何有正确方向的帮助或建议:)
解决方法:
目前尚不清楚你在追求什么.
首先,@ Ignore告诉JUnit测试运行器忽略测试.你没有在你的问题中提到测试,但我们应该清楚这是@Ignore的用途. .NET中的测试运行器具有类似的属性(例如,在xUnit中,属性为[Ignore]).
因此,如果您正在使用测试运行器,请找到该测试运行器的相应属性.如果您没有使用测试运行器,那么在给出@Ignore与测试运行密切相关之后,您究竟是什么?
你在写自己的测试跑步者吗?为什么?有plenty plenty0免费测试跑步者可用.使用它们!
I want the attribute to suppress the execution even if the method is called.
好吧,如果我看过一个,那就是代码味道.
你有几个选择.
将代码插入到您应用的每个方法[忽略]:
[AttributeUsage(AttributeTargets.Method)]
public class Ignore : Attribute { }
[Ignore]
public static void M() {
var ignoreAttributes =
MethodBase.GetCurrentMethod().GetCustomAttributes(typeof(Ignore), true);
if (ignoreAttributes.Any()) {
return;
}
// method execution proceeds
// do something
}
或者,您可以使用interception technique.
或者,您可以使用post-compilation框架.
所有这些都有非常严重的问题.他们有问题,因为你正在做的是代码味道.
标签:c,reflection,custom-attributes,methodinfo 来源: https://codeday.me/bug/20190520/1142401.html