gpt4 book ai didi

c# - 无法在仅反射上下文中获取 MethodInfo 实例

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

以下代码正确显示了方法的名称:

static void Main(string[] args)
{
try
{
Assembly assembly = Assembly.Load("ClassLibrary1");
foreach (var referencedAssembly in assembly.GetReferencedAssemblies())
{
Assembly.Load(referencedAssembly.Name);
}
Type bl1Type = assembly.GetType("ClassLibrary1.Bl1");
var types = new[] {typeof(MyEnum) };
var method = bl1Type.GetMethod("Method1", BindingFlags.Instance | BindingFlags.Public, Type.DefaultBinder, types, null);
Console.WriteLine(method == null ? "Method was null" : $"Found {method.Name}");
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}

但是,如果我尝试在仅反射上下文中解析 Method1 以提高性能,并使用 Assembly.ReflectionOnlyLoad("ClassLibrary1"更改对 Assembly.Load("ClassLibrary1"); 的调用"); 那么 method 始终为 null 并且不会得到解析。关于如何在仅反射上下文中解析方法有什么想法吗?

最佳答案

如果您尝试以下操作,您将看到您的方法已在列表中找到

var methods = bl1Type.GetMethods(BindingFlags.Instance | BindingFlags.Public);

此外,如果您搜索接受字符串参数的方法,它也将起作用

var types = new[] {typeof(string)};

我认为它被 MyEnum 混淆了。
如果您从第二个 dll 加载 MyEnum 它将起作用

Assembly assembly2 = Assembly.ReflectionOnlyLoad("ClassLibrary2");
Type bl2Type = assembly2.GetType("ClassLibrary2.MyEnum");
var types = new[] { bl2Type };

完整代码

using System;
using System.Linq;
using System.Reflection;

namespace ReflectionTest
{
class Program
{
static void Main(string[] args)
{
Assembly assembly = Assembly.ReflectionOnlyLoad("ClassLibrary1");
Type bl1Type = assembly.GetType("ClassLibrary1.Bl1");
var types = new[] { Assembly.ReflectionOnlyLoad(assembly.GetReferencedAssemblies().Single(a => a.Name == "ClassLibrary2").Name).GetType("ClassLibrary2.MyEnum") };
//var types = new[] {typeof(MyEnum)}; //doesn't work
var method = bl1Type.GetMethod("Method1", BindingFlags.Instance | BindingFlags.Public, Type.DefaultBinder, types, null);
Console.WriteLine(method == null ? "Method was null" : $"Found {method.Name}");
Console.ReadLine();
}
}
}

所以,您的初始代码不起作用,因为它试图找到使用不同“MyEnum”的方法(当然它不存在)

关于c# - 无法在仅反射上下文中获取 MethodInfo 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46268828/

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