如何通过名称和参数类型在 C# 程序集中查找函数?
How to find a function in an assembly in C# by its name and argument types?
我有一个托管程序集 'some.dll'、一个函数名和它作为参数的类型作为输入。如何在 运行 时间使用 .NET C# 4.6 应用程序找到此类函数?
如果我没理解错的话,你是在寻求反思
这是一个完全不现实的例子。不过
给定
// Assembly1.dll
namespace TestAssembly
{
public class Main
{
public void Run(string parameters)
{
// Do something...
}
public void TestNoParameters()
{
// Do something...
}
}
}
你可以做到
public object Test(string methodName)
{
var assembly = Assembly.LoadFile("...Assembly1.dll");
var type = assembly.GetType("TestAssembly.Main");
if (type == null)
{
return null;
}
var methodInfo = type.GetMethod(methodName);
if (methodInfo == null)
{
return null;
}
var parameters = methodInfo.GetParameters();
var classInstance = Activator.CreateInstance(type, null);
if (parameters.Length == 0)
{
methodInfo.Invoke(classInstance, null);
}
else
{
var parametersArray = new object[] { "Hello" };
return methodInfo.Invoke(classInstance, parametersArray);
}
return null;
}
注意:您也可以通过编程方式迭代内容,并启发式地找到您正在寻找的 类 和方法
我有一个托管程序集 'some.dll'、一个函数名和它作为参数的类型作为输入。如何在 运行 时间使用 .NET C# 4.6 应用程序找到此类函数?
如果我没理解错的话,你是在寻求反思
这是一个完全不现实的例子。不过
给定
// Assembly1.dll
namespace TestAssembly
{
public class Main
{
public void Run(string parameters)
{
// Do something...
}
public void TestNoParameters()
{
// Do something...
}
}
}
你可以做到
public object Test(string methodName)
{
var assembly = Assembly.LoadFile("...Assembly1.dll");
var type = assembly.GetType("TestAssembly.Main");
if (type == null)
{
return null;
}
var methodInfo = type.GetMethod(methodName);
if (methodInfo == null)
{
return null;
}
var parameters = methodInfo.GetParameters();
var classInstance = Activator.CreateInstance(type, null);
if (parameters.Length == 0)
{
methodInfo.Invoke(classInstance, null);
}
else
{
var parametersArray = new object[] { "Hello" };
return methodInfo.Invoke(classInstance, parametersArray);
}
return null;
}
注意:您也可以通过编程方式迭代内容,并启发式地找到您正在寻找的 类 和方法