C#4.0’dynamic’不设置ref / out参数
发布时间:2020-12-15 06:28:16 所属栏目:百科 来源:网络整理
导读:我正在试验DynamicObject.我尝试做的一件事是设置ref / out参数的值,如下面的代码所示.但是,我无法在Main()中正确设置i和j的值(即使在TryInvokeMember()中设置正确).有没有人知道如何使用ref / out参数调用DynamicObject对象,并能够检索方法中设置的值? cla
我正在试验DynamicObject.我尝试做的一件事是设置ref / out参数的值,如下面的代码所示.但是,我无法在Main()中正确设置i和j的值(即使在TryInvokeMember()中设置正确).有没有人知道如何使用ref / out参数调用DynamicObject对象,并能够检索方法中设置的值?
class Program { static void Main(string[] args) { dynamic proxy = new Proxy(new Target()); int i = 10; int j = 20; proxy.Wrap(ref i,ref j); Console.WriteLine(i + ":" + j); // Print "10:20" while expect "20:10" } } class Proxy : DynamicObject { private readonly Target target; public Proxy(Target target) { this.target = target; } public override bool TryInvokeMember(InvokeMemberBinder binder,object[] args,out object result) { int i = (int) args[0]; int j = (int) args[1]; target.Swap(ref i,ref j); args[0] = i; args[1] = j; result = null; return true; } } class Target { public void Swap(ref int i,ref int j) { int tmp = i; i = j; j = tmp; } } 更新7/15: 更新9/8/2012: 解决方法
这看起来可能是一个bug – 可能在DynamicObject中.如果您添加一个Wrap方法代理如下所示:
public void Wrap(ref int x,ref int y) { target.Swap(ref x,ref y); } 那么即使这仍然被动态地调用(即,Main中的代码保持不变)代码工作…所以至少一般的“动态对象的工作”层如何支持传递引用. 我怀疑这是否是DLR中的一个错误,为.NET 4修复可能还为时太晚 – 但是值得报Connect,所以它可以修复到一个service pack中.或者,如果这是一个有意的限制/限制,应该在MSDN中清楚地记录(据我所知) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |