2016-03-22 8 views
1

Ich möchte mit C# .Net ein Textfeld in einem Windows-Formular erstellen, das einfache Berechnungen verarbeiten kann. Wenn der Benutzer beispielsweise in das Textfeld =5*7 schreibt, wird das Textfeld textbox.Text = 35 validiert.Textfeld mit Berechnungsformel

Meine Frage ist, wie kann ich die Zeichenfolge "=5*7" in doubles und Symbole konvertieren, um die Berechnungen zu machen.

+2

Werfen sie einen Blick auf diese [SO Frage] (http : //stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net). –

+0

@ AlessandroD'Andria Dies ist, was ich gesucht habe! – Charitini

+0

Dies kann ein Duplikat sein, aber die Antworten auf diesen Beitrag schlagen nicht CSharp.Scripting vor, das ist, imo, eine überlegene Lösung für jeden von ihnen. – Crowcoder

Antwort

0

Sie können hierfür die CodeAnalysis.CSharp.Scripting-Bibliothek verwenden. Es ist available from Nuget

using Microsoft.CodeAnalysis.CSharp.Scripting; 
using System; 

namespace ExpressionParser 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //Demonstrate evaluating C# code 
      var result = CSharpScript.EvaluateAsync("System.DateTime.Now.AddDays(-1) > System.DateTime.Now").Result; 
      Console.WriteLine(result.ToString()); 

      //Demonstrate evaluating simple expressions 
      var result2 = CSharpScript.EvaluateAsync(" 5 * 7").Result; 
      Console.WriteLine(result2); 
      Console.ReadKey(); 
     } 
    } 
} 

nuget Pakete:

< Paket id = "Microsoft.CodeAnalysis.Analyzers" version = "1.1.0" targetFramework = "net461"/> < Paket id = "Microsoft. CodeAnalysis.Common "version = "1.1.1" targetFramework = "net461"/ > < Paket id = "Microsoft.CodeAnalysis.CSharp" version = "1.1.1" targetFramework = "net461"/ > < Paket id =" Microsoft.CodeAnalysis.CSharp.Scripting "ver sion = "1.1.1" targetFramework = "net461"/> < Paket id = "Microsoft.CodeAnalysis.Scripting" version = "1.1.1" targetFramework = "net461"/> < Paket id = "Microsoft.CodeAnalysis. Scripting.Common“version = "1.1.1" targetFramework = "net461"/ >

+0

Ich habe versucht, das nugget-Paket 'Microsoft.CodeAnalysis.CSharp.Scripting 1.1.1' einzufügen, aber das enthält nicht den Namespace' Microsoft.CodeAnalysis.CSharp.Scripting' - so wird das Beispiel auf meinem Rechner nicht kompiliert. Wie es scheint, existiert 'CSharpScript' nicht. Könnten Sie bitte ein Licht darauf werfen? – Matt

+0

@Matt siehe Bearbeiten für die Nuget-Pakete – Crowcoder

+0

Sie haben Recht, danke, ich habe das Paket zu einem leeren Konsolenprojekt hinzugefügt und Ihren Code eingefügt. Der Schlüssel ist, die Framework-Version in 4.6.1 zu ändern, bevor das nuget-Paket hinzugefügt wird. In meinem Fall war die Standardeinstellung für das Framework 4.5.2, was nicht funktionierte (es wurde versucht etwas zu importieren, aber es ist fehlgeschlagen). Nach dieser Änderung funktionierte es sofort. – Matt

2

verwenden, um die CodeAnalysis.CSharp.Scripting Bibliothek hier, wie es zu benutzen wiki