Как исправить InvalidCastException для динамического объекта? - PullRequest
1 голос
/ 08 августа 2011
ScriptEngine rubyEngine;
//...
dynamic execution_result = rubyEngine.Execute(script, scope);

if (execution_result != null && !silent)
    WriteResponce(execution_result.ToString());

Этот код генерирует InvalidCastException :

Невозможно привести объект типа 'SOMELIB.Graphics' к типу. 'SOMELIB.Object'.

Когда происходит сравнение:

execute_result! = Null

Если это сравнение удалено, тогда execute_result.ToString () вызывает то же исключение.

Я нашел обходной путь:

if (execution_result is SOMELIB.Graphics)
{
    SOMELIB.Graphics g = execution_result as SOMELIB.Graphics;
    WriteResponce(g.ToString());
    return;
}

но я не понимаю, почему появляется это исключение и как его исправить.

1 Ответ

0 голосов
/ 08 ноября 2012

Приведите динамический объект к объекту, чтобы избежать DLR (динамического языка исполнения), попробуйте связать метод ToString с его (реальным) динамическим типом класса.

ScriptEngine rubyEngine;
//...
dynamic execution_result = rubyEngine.Execute(script, scope);

object result = execution_result as object;
if (result != null && !silent)
    WriteResponce(result.ToString());
...