ScriptengineException при вызове строковых методов - PullRequest
0 голосов
/ 04 июля 2018

Когда я использую следующий фрагмент, я получаю ScrptEngineException, что объект не поддерживает свойство или метод.

var engine = new JScriptEngine();
engine.AddHostType("String", typeof(System.String));
engine.ExecuteCommand("test = 'variabel'; test.StartsWith('nice');");

Я пробовал некоторые другие функции String, такие как IndexOf, ToArray (Extension) и некоторые другие, но, похоже, они не работают.

Может ли кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 04 июля 2018

В вашем примере test - это строка JavaScript, в которой нет метода StartsWith. Даже если бы он был возвращен из .NET, для удобства он был бы преобразован в строку JavaScript.

Вы можете добавить метод, который преобразует строку JavaScript в строку .NET:

engine.AddHostObject("host", new HostFunctions());
engine.Execute(@"
    String.prototype.toHost = function() {
        return host.newVar(this.valueOf());
    }
");

И тогда это должно работать:

engine.AddHostType(typeof(Console));
engine.Execute(@"
    test = 'variable';
    Console.WriteLine(test.toHost().StartsWith('var'));
    Console.WriteLine(test.toHost().StartsWith('vaz'));
");

Кстати, будьте осторожны с этим:

engine.AddHostType("String", typeof(System.String));

Это скрывает встроенную функцию JavaScript String и может привести к поломке.

...