1
사용자가 x
및 y
의 수식을 가능한 한 자연스럽게 입력하도록하고 싶습니다. 예를 들어 Complex.Sin(x)
을 입력하는 대신 Sin(x)
만 사용하는 것이 좋습니다.동적으로 생성 된 코드에 "using static"지시어를 사용하는 방법은 무엇입니까?
예를 들어 사용자가 Sin(x)
을 정의하면 다음 코드가 실패합니다.
using Microsoft.CodeAnalysis.CSharp.Scripting;
using System;
using System.Numerics;
using static System.Console;
using static System.Numerics.Complex;
namespace MathEvaluator
{
public class Globals
{
public Complex x;
public Complex y;
}
class Program
{
async static void JobAsync(Microsoft.CodeAnalysis.Scripting.Script<Complex> script)
{
Complex x = new Complex(1, 0);
Complex y = new Complex(0, 1);
try
{
var result = await script.RunAsync(new Globals { x = x, y = y });
WriteLine($"{x} * {y} = {result.ReturnValue}\n");
}
catch (Exception e)
{
WriteLine(e.Message);
}
}
static void Main(string[] args)
{
Console.Write("Define your expression in x and y: ");
string expression = Console.ReadLine(); //user input
var script = CSharpScript.Create<Complex>(expression, globalsType: typeof(Globals));
script.Compile();
JobAsync(script);
}
}
}
질문
어떻게 동적으로 생성 된 코드를
using static
지시어를 사용 하는가?
은 어쩌면 당신은 사용자 입력에 대한 자신의 파서를 작성해야을 코드를 사용하면 함수를 다른 것으로 쉽게 매핑 할 수 있습니다. – poke
'ScriptOptions.Default.WithImports'. 또한'await' 작업에 대한 좋은 사례를보고 싶을 수도 있습니다. 그렇지 않으면 예기치 않은 놀라움이 생길 수 있습니다 (예 :'비동기 무효화 '는 일반적으로 나쁜 생각입니다). – Luaan
@Luaan : 감사합니다. C#에서 비동기 프로그래밍에 익숙하지 않습니다. 당신이 그것을 향상시킬 수 있다고 생각한다면, 대답으로 자유롭게 게시하십시오. 나는 정말로 그것을 고맙게 여기고 나는 물론 투표 할 것이다. :-) –