我试图通过参数反射调用方法,我得到:
对象与目标类型不匹配
如果我调用没有参数的方法,它可以正常工作.如果我调用该方法Test("TestNoParameters"),则基于以下代码,它可以正常工作.但是,如果我打电话Test("Run"),我会得到一个例外.我的代码有问题吗?
我最初的目的是传递一系列对象,例如public void Run(object[] options)但这不起作用,我尝试了一些更简单的例如字符串而没有成功.
// Assembly1.dll
namespace TestAssembly
{
public class Main
{
public void Run(string parameters)
{
// Do something...
}
public void TestNoParameters()
{
// Do something...
}
}
}
// Executing Assembly.exe
public class TestReflection
{
public void Test(string methodName)
{
Assembly assembly = Assembly.LoadFile("...Assembly1.dll");
Type type = assembly.GetType("TestAssembly.Main");
if (type != null)
{
MethodInfo methodInfo = type.GetMethod(methodName);
if (methodInfo != null)
{
object result = null;
ParameterInfo[] …Run Code Online (Sandbox Code Playgroud) 我使用带有可选参数的C#4.0遇到了另一个问题.
我如何调用一个函数(或者更确切地说是构造函数,我有ConstructorInfo对象),我知道它不需要任何参数?
这是我现在使用的代码:
type.GetParameterlessConstructor()
.Invoke(BindingFlags.OptionalParamBinding |
BindingFlags.InvokeMethod |
BindingFlags.CreateInstance,
null,
new object[0],
CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
(我刚试过不同的BindingFlags).
GetParameterlessConstructor是我写的自定义扩展方法Type.
如果我有一个方法如:
public void MyMethod(int arg1, string arg2)
Run Code Online (Sandbox Code Playgroud)
我如何获得参数的实际名称?我似乎无法在MethodInfo中找到任何实际上会给我参数名称的内容.
我想写一个看起来像这样的方法:
public static string GetParamName(MethodInfo method, int index)
Run Code Online (Sandbox Code Playgroud)
所以如果我用以下方法调用此方法:
string name = GetParamName(MyMethod, 0)
Run Code Online (Sandbox Code Playgroud)
它将返回"arg1".这可能吗?