【发布时间】:2019-03-11 15:02:13
【问题描述】:
我正在尝试了解如何使用自定义属性来调用传递参数的方法
[ExecuteMe("hello", "reflection")]
public void M3(string s1, string s2)
{
Console.WriteLine("M3 s1={0} s2={1}", s1, s2);
}
我正在尝试使用以下代码调用此方法:
static void Main(string[] args)
{
var assembly= Assembly.LoadFrom("MyLibrary.dll");
foreach (var type in assembly.GetTypes())
{
object act = Activator.CreateInstance(type);
var methodInfos = type.GetMethods().Where(m => m.GetCustomAttributes(typeof(ExecuteMe)).Any());
foreach (var mInfo in methodInfos)
{
//Console.WriteLine(mInfo.Name);
var argument = mInfo.GetParameters();
foreach (var a in argument)
{
Console.WriteLine(a);
// a.RawDefaultValue;
mInfo.Invoke(act, new object[]{a});
}
}
if (type.IsClass)
Console.WriteLine(type.FullName);
}
Console.ReadLine();
}
它不起作用,因为“a”是一个 ParameterInfo 并且调用需要一个 Object[]。 我做错了什么以及如何获得这些值?
这是我的属性:
public class ExecuteMe : Attribute
{
public object[] args;
public ExecuteMe(params object[] _args)
{
this.args = _args;
}
}`
【问题讨论】:
-
您永远不会真正访问您找到的属性的
args成员。也许您应该首先将其打印到控制台。 -
抱歉,您能说得具体一点吗?
标签: c# reflection invoke custom-attributes