gpt4 book ai didi

c# - 如何从反射中的 ParameterInfo[] 中获取实际值

转载 作者:行者123 更新时间:2023-11-30 22:19:42 25 4
gpt4 key购买 nike

实际上我没有什么问题可以更容易地理解我要问的问题我必须先展示我的代码。

public static void Main(string[] args)
{
CustomClass customClass = new CustomClass();
customClass.SomeMethod("asdas", true, 30.5);

}

public class CustomClass
{
[MyAttribute]
public Boolean SomeMethod(String a, Boolean b, Double c)
{
return true;
}
}

public class MyAttribute : Attribute
{
public MyAttribute()
{
SomeIntercepter.InterceptEverything();
}
public void DoSomethingBeforeMethodexecutes()
{
....
}
public void DoSomethingAfterMethodExecutes()
{
....
}
}

public class SomeIntercepter
{
public static void InterceptEverything()
{
StackTrace stackTrace = new StackTrace();
var method = stackTrace.GetFrame(2).GetMethod();
var parameters = method.GetParameters();
if (parameters.Length > 3)
return;

String cacheKey = method.Name;

for (int i = 0; i < parameters.Length; i++)
{
//HOW TO GET THE PARAMETER DATA ASSIGNED
cacheKey += "_" + parameters[i];
}
}
}

所以我想做的。我尝试在它调用的每个方法上拦截方法,并根据标有 [MyAttribute] 的方法的传入数据做一些事情。因此,我通过 StackTrace 访问该方法并尝试使用 GetParameters 获取所有传入数据。这是我的问题: 1) 如何在 InterceptEverything() 中对 SomeMethod 的所有传入数据进行 object[] 2) 如何告诉 MyAttribute 在使用 MyAttribute 标记的方法运行之前运行方法 DoSomethingBeforeMethodexecutes() 3) 如何告诉 MyAttribute 在用 MyAttribute 标记方法后运行以运行方法 DoSomethingAfterMethodexecutes()

感谢您的任何建议。

最佳答案

您无法通过 ParameterInfo 从任何特定帧获取。该设施不存在。

此外:属性不会执行。除非您使用类似 postsharp 的东西,否则它们只是信息。要让它们执行,您必须明确地编写反射代码来执行此操作。

关于c# - 如何从反射中的 ParameterInfo[] 中获取实际值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15430410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com