Несколько человек разработали библиотеки с открытым исходным кодом, чтобы решить эту проблему.Я смотрю на Linq2CodeDom , который преобразует выражения в граф CodeDom, который затем можно скомпилировать в JavaScript, если код совместим.
Script # использует оригиналИсходный код C # и скомпилированная сборка, а не дерево выражений.
Я внес небольшие изменения в Linq2CodeDom, чтобы добавить JScript в качестве поддерживаемого языка - по сути, просто добавив ссылку на Microsoft.JScript, обновив enum идобавив еще один случай в GenerateCode.Вот код для преобразования выражения:
var c = new CodeDomGenerator();
c.AddNamespace("Example")
.AddClass("Container")
.AddMethod(
MemberAttributes.Public | MemberAttributes.Static,
(int x) => "Square",
Emit.@return<int, int>(x => x * x)
);
Console.WriteLine(c.GenerateCode(CodeDomGenerator.Language.JScript));
И вот результат:
package Example
{
public class Container
{
public static function Square(x : int)
{
return (x * x);
}
}
}
Подпись метода отражает более строго типизированную природу JScript.Может быть лучше использовать Linq2CodeDom для генерации C #, а затем передать это в Script #, чтобы преобразовать это в JavaScript.Я полагаю, что первый ответ является наиболее правильным, но, как вы можете видеть, просмотрев исходный код Linq2CodeDom, при обработке каждого случая требуется много усилий для правильной генерации кода.