2016-03-22 7 views
1

Я хотел бы создать текстовое поле в виде окна с использованием C# .Net, который сможет обрабатывать простые вычисления. Например, если пользователь пишет в текстовом поле =5*7, тогда, когда текстовое поле получает подтверждение textbox.Text = 35.Текстовое поле, содержащее формулу расчета

Мой вопрос в том, как я могу преобразовать строку "=5*7" в doubles и символы, чтобы сделать вычисления.

+2

Взгляните на это [SO] вопрос (HTTP : //stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net). –

+0

@ AlessandroD'Andria Это то, что я искал! – Charitini

+0

Это может быть дубликат, но ответы на этот пост не предлагают CSharp.Scripting, который является imo лучшим решением для любого из них. – Crowcoder

ответ

0

Для этого вы можете использовать библиотеку CodeAnalysis.CSharp.Scripting. Это 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 пакеты:

< пакет ID = "Microsoft.CodeAnalysis.Analyzers" версия = "1.1.0" targetFramework = "net461"/> < пакет ID = "Microsoft. CodeAnalysis.Common "версия = "1.1.1" targetFramework = "net461"/ > < пакет ID = "Microsoft.CodeAnalysis.CSharp" версия = "1.1.1" targetFramework = "net461"/ > < пакет ID =" Microsoft.CodeAnalysis.CSharp.Scripting "ver Sion = "1.1.1" targetFramework = "net461"/> < пакет ID = "Microsoft.CodeAnalysis.Scripting" версия = "1.1.1" targetFramework = "net461"/> < пакет ID = "Microsoft.CodeAnalysis. Scripting.Common»версия = "1.1.1" targetFramework = "net461"/ >

+0

Я попытался включить пакет nuget 'Microsoft.CodeAnalysis.CSharp.Scripting 1.1.1', но это не включает пространство имен' Microsoft.CodeAnalysis.CSharp.Scripting' - поэтому пример не будет компилироваться на моей машине. Как кажется, 'CSharpScript' не существует. Не могли бы вы пролить свет на это, пожалуйста? – Matt

+0

@Matt см. Редактирование пакетов Nuget – Crowcoder

+0

Вы правы, спасибо, я добавил пакет в пустой проект консоли и вставил ваш код. Ключ состоит в том, чтобы изменить версию фрейма до 4.6.1 перед добавлением пакета nuget. В моем случае значение по умолчанию для фреймворка было 4.5.2, которое не работало (оно пыталось импортировать что-то, но не получилось). После этого изменения он работал мгновенно. – Matt

2

использовать библиотеку CodeAnalysis.CSharp.Scripting здесь, как использовать его wiki

Смежные вопросы