相关疑难解决方法(0)

反思:如何使用参数调用方法

我试图通过参数反射调用方法,我得到:

对象与目标类型不匹配

如果我调用没有参数的方法,它可以正常工作.如果我调用该方法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# reflection parameters methods invoke

187
推荐指数
7
解决办法
35万
查看次数

通过反射调用带有可选参数的方法

我使用带有可选参数的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.

.net c# reflection invoke default-value

55
推荐指数
2
解决办法
2万
查看次数

如何获取方法参数的名称?

如果我有一个方法如:

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".这可能吗?

.net c# reflection

31
推荐指数
2
解决办法
5万
查看次数

标签 统计

c# ×3

reflection ×3

.net ×2

invoke ×2

default-value ×1

methods ×1

parameters ×1