当我是对的。NET反射盛会的事情,我在我以前的专栏中解释工作,我学到了另外一个有趣的事情,Type.InvokeMember。如何传递出或ref参数的方法调用使用Type.InvokeMember?如果你想调用一个方法的原型:int DoSomething(string someString, int someInt);
,那么你会使用这样的InvokeMember:{C}
或使用一些新的对象[] {...}.变量但你是做什么用的args如果DoSomething的需要out或ref参数?int DoSomething(out string someString, ref int someInt);
像这样将无法正常工作:string someText = string.Empty;
int someInt = 0;
object obj = someType.InvokeMember("DoSomething",
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
null,
this,
new object[] {someText, someInt});
这是棘手的。object[] args = new object[] { someText, someInt };
object obj = someType.InvokeMember("DoSomething",
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
null,
this,
args);
甚至令人惊讶的这个工程:object[] args = new object[2];
// or object[] args = new object[] { null, null };
object obj = someType.InvokeMember("DoSomething",
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
null,
this,
args);
访问索引ARGS的值。因此,声明参数对象[]为局部变量解决问题,但我不明白为什么这种行为。也许有人可以解释!{S0}