2017-05-19 21 views
-2

これを手伝ってもらえますか? I`mロザリン初心者:Dメソッドroslynにパラメータを追加する

- >ツリー番号1における方法(数2)と数値2(数2)に送信 - > "number3 = 5"

このツリー(数5)にnumber3に送信"方法(2,2)"

- >このメソッドから値を返す "INTのreturnValue =法(2,2)"

- number3から>戻り値 "INT someNumber = number3"

enter image description here

static void Main(string[] args) 
     { 
      project1(); 
     } 

     public static void project1() 
     { 
      var tree = CSharpSyntaxTree.ParseText(@" 
      class OurService 
      { 
       int number3; 
       int Method(int number1, int number2) 
       { 
        return number1 + number2 + number3; 
       } 
      }"); 


      var diagnostics = tree.GetDiagnostics().Where(n => n.Severity == Microsoft.CodeAnalysis.DiagnosticSeverity.Error).FirstOrDefault(); 

      var root = (CompilationUnitSyntax)tree.GetRoot(); 

      var methodDeclareted = root.DescendantNodes().OfType<MethodDeclarationSyntax>().FirstOrDefault(); 
      var parameters = methodDeclareted.ParameterList; 

     } 
+0

は、ここで質問がありますか? –

+0

@AntP私は別の場所からこれを印刷して、申し訳ありません。質問を追加することを忘れました。今はOKです。 –

+0

あなたが達成しようとしていることは(少なくとも私にとっては)まだそれほど明確ではありません。あなたは何をしようとしているのか詳しく説明してください。 – bassfader

答えて

0

私はこの問題を自分で解決します。私はこれだけを追加したいと思います。「Roslynは素晴らしいツールです。あなたはIronPythonとPythonを削除できます。私は将来的に、私はこのためにいくつかのポイントを得ることを願っています。今、私は私の質問のために得るためにPを-1:P笑

enter image description here

public static void TestCodeAnalizer() 
     { 

      //var scriptOptions = ScriptOptions.Default.WithReferences("Microsoft.CSharp") 
      var text = @"using System.Linq; 

      public class Calculator 
      { 

      public int number3 = 0; 

      public static object AddTwoNumbers(int number1, int number2) 
      { 
       return (number1 + number2); 
      } 

      public static int AddThreeNumbers(int number1, int number2) 
      { 
       Calculator calculator = new Calculator(); 
       return calculator.AddThreeNumbersNonStatic(number1,number2,5); 
      } 

      public int AddThreeNumbersNonStatic(int number1, int number2, int number3) 
      { 
       this.number3 = number3; 

       return (number1 + number2 + this.number3); 
      } 

      }"; 

      var tree = SyntaxFactory.ParseSyntaxTree(text); 
      var compilation = CSharpCompilation.Create(
       "calc.dll", 
       options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary), 
       syntaxTrees: new[] { tree }, 
       references: new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location), MetadataReference.CreateFromFile(typeof(ExpandoObject).Assembly.Location) }); 

      Assembly compiledAssembly; 
      using (var stream = new MemoryStream()) 
      { 
       var compileResult = compilation.Emit(stream); 
       compiledAssembly = Assembly.Load(stream.GetBuffer()); 
      } 

      Type calculator = compiledAssembly.GetType("Calculator"); 

      //my send parameters :D 
      object[] parametersArray = new object[] { 2, 2 }; 

      //first answer 
      MethodInfo evaluate_AddTwoNumbers = calculator.GetMethod("AddTwoNumbers"); 
      string answer_AddTwoNumbers = evaluate_AddTwoNumbers.Invoke(null, parametersArray).ToString(); 

      //second answer 
      MethodInfo evaluate_AddThreeNumbers = calculator.GetMethod("AddThreeNumbers"); 
      string answer_AddThreeNumbers = evaluate_AddThreeNumbers.Invoke(null, parametersArray).ToString(); 


     } 
関連する問題