C# 4.0 'dynamic' doesn't set ref/out arguments
Posted
by Buu Nguyen
on Stack Overflow
See other posts from Stack Overflow
or by Buu Nguyen
Published on 2010-03-19T06:10:51Z
Indexed on
2010/03/19
6:21 UTC
Read the original article
Hit count: 301
I'm experimenting with DynamicObject
. One of the things I try to do is setting the values of ref
/out
arguments, as shown in the code below. However, I am not able to have the values of i
and j
in Main()
set properly (even though they are set correctly in TryInvokeMember()
). Does anyone know how to call a DynamicObject
object with ref
/out
arguments and be able to retrieve the values set inside the method?
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;
}
}
© Stack Overflow or respective owner