C#通过内联传递参数并作为局部变量的反射调用方法
我有以下代码。它有问题。呼吁 MyMethod不返回基于 已传递输入值C#通过内联传递参数并作为局部变量的反射调用方法,c#,reflection,C#,Reflection,我有以下代码。它有问题。呼吁 MyMethod不返回基于 已传递输入值 foreach (var input in inputCollection) { var result = myInstance.GetType().InvokeMember("MyMethod", BindingFlags.InvokeMethod | BindingFlags.Public, null, myInstance, new Object[] { inp
foreach (var input in inputCollection)
{
var result = myInstance.GetType().InvokeMember("MyMethod",
BindingFlags.InvokeMethod | BindingFlags.Public,
null,
myInstance,
new Object[] { input })
}
相反,如果我执行以下操作,它将按预期工作并返回
基于提供的输入值的不同输出
foreach (var input in inputCollection)
{
var args = new Object[] { input };
var result = myInstance.GetType().InvokeMember("MyMethod",
BindingFlags.InvokeMethod | BindingFlags.Public,
null,
myInstance,
args)
}
如果我将参数与对象初始值设定项内联并通过本地传递,这里可能会有什么不同
变量
编辑:
在非工作代码中,它总是返回InputCollection的第一项的结果,而不考虑输入的当前迭代值
谢谢
杰伊没有区别。你的问题在别的地方。请发布实际代码(因为您发布的代码甚至没有编译…)。请参阅。
inputCollection
是一个集合还是通过LINQ生成的带有延迟执行的IEnumerable
?您是否立即打印/使用结果
,或者是否有其他事情与延迟执行有关?@dasblinkenlight Yes。我马上就把结果消耗掉。它是inputCollection是一个列表,其中T是任何类。@JayNanavaty然后还有其他事情发生。试着在一个单独的例子中复制它——比如,在ideone.com上,并发布一个链接到一个断开的实时示例。除此之外,您需要BindingFlags.Instance
,除非该方法是静态的(在这种情况下,您不会将myInstance
传递给InvokeMember
),否则它们应该是相同的。我已经花时间去了。所以还有别的事情发生了