如何将C#类型转换为IronRuby类型,反之亦然?

时间:2012-05-26 15:07:55

标签: c# ironruby

例如:

ruby​​代码(仅用于测试):

def process_initial_array (ar)
     ar.join(" ")
end

c#代码: 在这里,我创建了字符串列表并将其传递给IronRuby

List<string> source_values = new List<string>();

它填充;

label2.Text=IronRuby.CSharp.BasicInteraction.calculator(source_values);


namespace IronRuby.CSharp
{
    public class BasicInteraction
    {internal static string calculator(List<string> source_values)
        {
            var rubyEngine = Ruby.CreateEngine();
            var scope = rubyEngine.ExecuteFile("math_logic.rb");
            string result = rubyEngine.Operations.InvokeMember(scope, "process_initial_array", source_values);
            return result;
        }
    }
}

它唤起了:

An unhandled exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in Anonymously Hosted DynamicMethods Assembly

Additional information: Unable to convert implicitly "IronRuby.Builtins.MutableString" to "string". There is explicit conversion.

好的,我在相关问题中找到了IronRuby字符串方法to_clr_string,所以我可以在哪里找到有关其他类型相同方法的文档?

1 个答案:

答案 0 :(得分:1)

在简要了解IronRuby source code之后,我只能找到与您的问题相关的to_clr_stringto_clr_type(转换为System.Type)。因此,我假设这些是您在内置ruby类型和CLR类型之间转换所需的唯一转换方法。其他类型的与其CLR对应类型相同。

请注意,还有其他方法可以将ruby 字符串转换为其他基本类型,例如intto_i)和double({{1 }})。

在您的示例中,您可以将结果显式转换为to_f

string

这样,您就不必在Ruby端调用var result = (string)rubyEngine.Operations.InvokeMember( scope, "process_initial_array", source_values);