如何使用 jint return 来自 C# 函数的值?
How do I return a value from a C# function using jint?
我目前正在使用 Jint (https://github.com/sebastienros/jint) 来处理 JavaScript。
我希望能够在 JavaScript 中使用自定义函数,该函数将执行在 C# 中创建的函数,然后 return 为 JavaScript.
例如,如果 JavaScript 是:
var x = MultiplyByTwo(100);
在我的 C# 中我有:
private static int MultiplyByTwo(int obj)
{
return obj * 2;
}
那么上面的代码会给变量 x 赋值为 200。
根据文档,有以下选项:
var engine = new Engine()
.SetValue("log", new Action<object>(Console.WriteLine));
engine.Execute(@"
function hello() {
log('Hello World');
};
hello();
");
我可以用函数名替换“Console.Writeline”,但它只接受无效函数。
换句话说,这可以从 JS 调用 C# 函数,但不能 return 一个值。
Jint 中是否存在我正在寻找的选项?
你当然可以引用一个class,它可以涉及设置属性,方法可以return值。例如:
class Program
{
static void Main(string[] args)
{
var myobj = new MyClass();
var engine = new Engine()
.SetValue("log", new Action<object>(Console.WriteLine))
.SetValue("myobj", myobj);
engine.Execute(@"
function hello() {
myobj.One = 'asdf';
var x = myobj.TwoTimes(4);
log(x); // logs 8
};
hello();
");
Console.WriteLine($"{myobj.One}, {myobj.Two}");
// output => "asdf 8"
}
}
public class MyClass
{
public string One { get; set; }
public int Two { get; set; }
public int TwoTimes(int value)
{
Two = 2 * value;
return Two;
}
}
如某些评论中所述,使用
SetValue("multiplyByTwo", new Func<int>(MultiplyByTwo))
这是一个功能齐全的示例。需要转换 Console.WriteLine
,因为有多个重载,我们需要告诉编译器使用哪一个:
using System;
using Jint;
var engine = new Engine()
.SetValue("multiplyByTwo", MultiplyByTwo)
.SetValue("log", (Action<string>)Console.WriteLine)
;
engine.Execute(@"
var x = multiplyByTwo(3);
log(x);
");
static int MultiplyByTwo(int obj)
{
return obj * 2;
}
我目前正在使用 Jint (https://github.com/sebastienros/jint) 来处理 JavaScript。
我希望能够在 JavaScript 中使用自定义函数,该函数将执行在 C# 中创建的函数,然后 return 为 JavaScript.
例如,如果 JavaScript 是:
var x = MultiplyByTwo(100);
在我的 C# 中我有:
private static int MultiplyByTwo(int obj)
{
return obj * 2;
}
那么上面的代码会给变量 x 赋值为 200。
根据文档,有以下选项:
var engine = new Engine()
.SetValue("log", new Action<object>(Console.WriteLine));
engine.Execute(@"
function hello() {
log('Hello World');
};
hello();
");
我可以用函数名替换“Console.Writeline”,但它只接受无效函数。 换句话说,这可以从 JS 调用 C# 函数,但不能 return 一个值。
Jint 中是否存在我正在寻找的选项?
你当然可以引用一个class,它可以涉及设置属性,方法可以return值。例如:
class Program
{
static void Main(string[] args)
{
var myobj = new MyClass();
var engine = new Engine()
.SetValue("log", new Action<object>(Console.WriteLine))
.SetValue("myobj", myobj);
engine.Execute(@"
function hello() {
myobj.One = 'asdf';
var x = myobj.TwoTimes(4);
log(x); // logs 8
};
hello();
");
Console.WriteLine($"{myobj.One}, {myobj.Two}");
// output => "asdf 8"
}
}
public class MyClass
{
public string One { get; set; }
public int Two { get; set; }
public int TwoTimes(int value)
{
Two = 2 * value;
return Two;
}
}
如某些评论中所述,使用
SetValue("multiplyByTwo", new Func<int>(MultiplyByTwo))
这是一个功能齐全的示例。需要转换 Console.WriteLine
,因为有多个重载,我们需要告诉编译器使用哪一个:
using System;
using Jint;
var engine = new Engine()
.SetValue("multiplyByTwo", MultiplyByTwo)
.SetValue("log", (Action<string>)Console.WriteLine)
;
engine.Execute(@"
var x = multiplyByTwo(3);
log(x);
");
static int MultiplyByTwo(int obj)
{
return obj * 2;
}