获取具有枚举参数的不明确方法



>我正在尝试从动态加载的程序集调用方法。 该方法含糊不清。

例如: 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

最新更新