How can you return the Rubified version of a CLR object back to the CLR?

Using IronRuby from C# is like a one-way street. I can take a C#
object, and use it from the DLR. But I can’t enhance that object and
return it back to C#. When I return it back, it looses all the Ruby

I’ve got an example of what I mean at

How can I get a CLR object back from IronRuby that keeps all the
goodness that Ruby gave it?

= Greg

This is by design. System.String doesn’t really have “reverse” method.
IronRuby just pretends it’s there to make work more like Ruby string. So
while you’re writing Ruby code you use these convenience methods, but
once you’re in another context (another language, be it C#, or Python)
you won’t see them.


But there is an Object that is a Ruby string which does understand
#reverse. Is there a way to get that object from Ruby back to the DLR?

Take a look at:

Using SimpleDelegator I can send back a delegate to Ruby’s string and
access the reverse method.

Unfortunately, since the reversed string is sent back to the CLR, its a
System::String. So I couldn’t call str.reverse().reverse().

It should be possible to get back a Ruby String (or any other Ruby
object) and use it from C#. Without this, you can not effectively use
IronRuby to enhance a legacy C# project. It is like having a Berlin
Wall between the CLR and DLR. As a visitor you can get into the DLR.
But as a citizen you cant get out of the DLR!