Type.InvokeMember和引用类型

Mat*_*sen 2 .net c# reflection

我正在尝试将Type.InvokeMember(String,BindingFlags,Binder,Object,array [])与默认绑定器一起使用.

对象数组中目标方法的一个参数是设置为null的引用类型.我想要我正在调用的方法来实例化引用类型,以便我可以继续使用它.例如:

using System;

namespace ConsoleApplication6
{
    class A
    {
        public void GetReferenceType(object o)
        {
            o = new object();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            object o = null;
            A a = new A();
            Type t = typeof(A);
            t.InvokeMember("GetReferenceType", System.Reflection.BindingFlags.InvokeMethod, null, a, new object[] { o });

            if (o == null)
            {
                throw new NullReferenceException();
            }
            else
            {
                //do something with o;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

解决方法是提供A一个属性并通过它访问o.

还有其他方法可以不改变A吗?

Jon*_*eet 7

好的,您需要在此处进行两项更改:

当您创建,例如用一个数组new object[] { o },只是复制o入阵-它不与该数组元素相关联o的变量.

一个更好的解决方案是GetReferenceType 返回新值,但是... 在方法中使用outref参数很少是个好主意void.