Как я могу использовать GetValues ​​при запуске Js-кодов с помощью Jint?

Мой вопрос примитивен. Но это очень полезно. Я проверял приложение Sébastien Ros - MSFT Jint на GitHub.

Как я могу получить свойство GetValue несколько раз?

GetValues(x,y,z...) или же GetValue("x").GetValue("y").GetValue("z"), потому что мне нужен x,y,z.. результат. не только х значение.

У меня есть проект, в котором я должен запустить js-коды, но есть много сравнений if (будьте осторожны, это не "if-else", есть if-if-if и продолжайте...) У меня есть доступ ко всем if Результаты заявления. Я обнаружил, что есть GetValue метод. Но я могу получить доступ только к одному значению. Когда я хочу получить доступ к "у", я должен использовать GetValue("y"), Но я хочу видеть значение "х" в то же время. Может быть, я желаю этого GetValues("x","y","z"...),

            var square = new Engine()
           .SetValue("x", 3) // define a new variable
           .SetValue("y",4)
           .Execute(" var isok1=false;  var isok2= false; if(3>1) { x * x; isok1=true; } if(2>1) { y * y }").GetValue("y") // execute a statement
           .ToObject() // converts the value to .NET
           ;
            Console.WriteLine(square.ToString());

      var square = new Engine()
           .SetValue("x", 3) // define a new variable
           .SetValue("y",4)
           .Execute(" var isok1=false;  var isok2= false; if(3>1) { x * x; isok1=true; } if(2>1) { y * y }      isok1;").GetCompletionValue() // execute a statement
           .ToObject() // converts the value to .NET
           ;
            Console.WriteLine(square.ToString());

Я проверил юрский кодеклекс

и я использовал его, как показано ниже:

   var engine = new Jurassic.ScriptEngine();
            engine.SetGlobalValue("x", 15);
            engine.SetGlobalValue("y", 2);
          
            engine.Execute(@" var isok1=false;  var isok2= false; if(3>1) { x=x * x; isok1=true; } if(2>1) { y= y * y; isok2=true; } ");
            Console.WriteLine(engine.GetGlobalValue<int>("x"));
            Console.WriteLine(engine.GetGlobalValue<int>("y"));
            Console.WriteLine(engine.GetGlobalValue<bool>("isok1"));
            Console.WriteLine(engine.GetGlobalValue<bool>("isok2"));
            Console.ReadKey();

ВОПРОС:

Как я могу сделать это внутри myproject, но используя Jint вместо Jurassic? Мне нужно свойство Jint multiGetValues ​​...

1 ответ

Вы можете вернуть массив из JavaScript: var result = (object[])engine.Execute("[x, y, z]").GetCompletionValue().ToObject(); или динамический объект dynamic result = engine.Execute("{x, y, z}").GetCompletionValue().ToObject(); Console.WriteLine(result.x);

Другие вопросы по тегам