ScriptEngine rubyEngine;
//...
dynamic execution_result = rubyEngine.Execute(script, scope);
if (execution_result != null && !silent)
WriteResponce(execution_result.ToString());
此代码生成 InvalidCastException :
无法将“SOMELIB.Graphics”类型的对象强制转换为类型 'SOMELIB.Object'。
进行比较时:
execution_result!= null
如果删除此比较,则execution_result.ToString()会抛出相同的异常。
我找到了一个解决方法:
if (execution_result is SOMELIB.Graphics)
{
SOMELIB.Graphics g = execution_result as SOMELIB.Graphics;
WriteResponce(g.ToString());
return;
}
但我不明白为什么会出现此异常以及如何解决此问题。
答案 0 :(得分:0)
将动态转换为对象以避免DLR(动态语言运行时)尝试将ToString方法绑定到其(实际)动态类类型。
ScriptEngine rubyEngine;
//...
dynamic execution_result = rubyEngine.Execute(script, scope);
object result = execution_result as object;
if (result != null && !silent)
WriteResponce(result.ToString());