Возможно, это не лучшее решение, но я потратил время на написание кода, поэтому я могу также опубликовать его:
Определите эти два:
private const string ClassString1 =
@"
namespace MyNamespace
{
public static class MyClass
{
public static int InvokeMath(int x, int y)
{
return ";
private const string ClassString2 = @";
}
}
}";
Метод, который делает магию:
public static int MethodOperation(int x, int y, string @operator)
{
var sharpCom = new CSharpCodeProvider();
var results = sharpCom.CompileAssemblyFromSource(new CompilerParameters { GenerateInMemory = true, GenerateExecutable = false }, ClassString1 + string.Format("x {0} y", @operator) + ClassString2);
return (int)results.CompiledAssembly.GetTypes().First().GetMethods().First().Invoke(null, new object[] { x, y });
}
Используется так:
var divide = MethodOperation(2, 2, "/");
var mod = MethodOperation(2, 2, "%");
Полное повторное использование кода, жертвуя читабельностью, скоростью и почти всем, чем вы можете пожертвовать!