• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

当方法中有out 或者ref参数时,应该怎么用MethodInfo.Invoke(...)调用

bency 2004-11-03 10:26:00
Assembly ass = this.GetType().Assembly;
Type tType = ass.GetType("EPManage.EPD.WServiceEPData");

object oService;

DataSet ds = new DataSet();
object[] arg = new object[1];
arg[0]=ds;

oService = Activator.CreateInstance(tType);


MethodInfo myMethod = tType.GetMethod("GetUseKindDataSet");
try
{
myMethod.Invoke(oService, arg);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
我的ds是ref,请问这样有什么不对,跟踪进入方法执行正确,但得不到结果ds????
...全文
170 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
brightheroes 2004-11-03
你的ref,或者out,其实还是存放在arg里面,要重新获取下

如下方法测试通过

Type t = Type.GetType("WindowsApplication1.SB");
MethodInfo mif = t.GetMethod("xx");
object obj = System.Activator.CreateInstance(t);
string s = "";
object[] args = new object[1]{s};
mif.Invoke(obj,args);

MessageBox.Show(args[0].ToString());


public class SB
{

public void xx(ref string s)
{
s = "返回!";
}
}
回复
brightheroes 2004-11-03
try

try
{
myMethod.Invoke(oService, arg);
ds = (DataSet)arg[0];//加上这个
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
回复
cedar_bj 2004-11-03
up two
回复
incisive 2004-11-03
up
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2004-11-03 10:26
社区公告

让您成为最强悍的C#开发者