>我正在尝试从动态加载的程序集调用方法。 该方法含糊不清。
例如: dll 包含以下方法:
public static string ReadString(string key, KeyType type)
public static string ReadString(string key, string type)
我想调用带有枚举参数键类型的那个。
var assembly = Assembly.LoadFile(@"stringutils.dll");
Type type = assembly.GetType("Utils.StringReader");
我试过了
var method = type.GetMethod("ReadString", new[] { typeof(string) });
并尝试过
var method = type.GetMethod("ReadString", new[] { typeof(string), typeof(int) });
但它返回空
您应该能够使用GetType(...)
获取枚举的类型,但您可能需要包含命名空间,并且它需要KeyType
驻留在您正在加载的程序集中。
您还可以使用GetMethods()
并根据任意条件过滤方法。例:
namespace MyNamespace
{
public enum MyEnum
{
Test1,
Test2
}
class Program
{
public static void MyMethod(MyEnum i) => Console.WriteLine($"My Method With {i}");
public static void MyMethod() => Console.WriteLine("My Method Without Enum");
static void Main(string[] args)
{
var asm = Assembly.GetExecutingAssembly();
var enumType = asm
.GetType("MyNamespace.MyEnum");
var method1 = asm
.GetType("MyNamespace.Program")
.GetMethod("MyMethod", new[] { enumType });
var method2 = asm.GetType("MyNamespace.Program")
.GetMethods()
.First(
m => m.IsStatic &&
m.IsPublic &&
m.Name == "MyMethod" &&
m.GetParameters().Count() == 1);
var myEnumValue = Enum.ToObject(enumType, 1);
method1.Invoke(null, new object[] { myEnumValue });
}
}
}
将输出My Method With Test2