例如:
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,所以我可以在哪里找到有关其他类型相同方法的文档?
答案 0 :(得分:1)
在简要了解IronRuby source code之后,我只能找到与您的问题相关的to_clr_string
和to_clr_type
(转换为System.Type
)。因此,我假设这些是您在内置ruby类型和CLR类型之间转换所需的唯一转换方法。其他类型的应与其CLR对应类型相同。
请注意,还有其他方法可以将ruby 字符串转换为其他基本类型,例如int
(to_i
)和double
({{1 }})。
在您的示例中,您可以将结果显式转换为to_f
:
string
这样,您就不必在Ruby端调用var result = (string)rubyEngine.Operations.InvokeMember(
scope, "process_initial_array", source_values);
。