Ноя 17, 2013 - Уроки Visual Basic.NET Один комментарий
Решение мат. выражений средствами .NET
До этого мы разбирали пример, решения выражения с помощью метода Eval из VBS, а сегодня разберем, как средствами .NET вычислить результат строки (выражения)
Imports System.CodeDom.Compiler Imports System.Reflection Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Label1.Text = "Ответ: " & Решить(TextBox1.Text) End Sub Public Function Решить(ByVal выражение As String) As String Dim myCode As CodeDomProvider = CodeDomProvider.CreateProvider("VB") Dim myPar As New CompilerParameters() 'формируем виртуальный класс, в котором будет производиться расчет Dim myCodeBody As New System.Text.StringBuilder() myCodeBody.AppendLine("Public Class MyCalculator") myCodeBody.AppendLine("Public Function Calc() As Double") 'TextBox1.Text.ToLower().Replace(«x», TextBox2.Text) — меняем икс в формуле (TextBox1) на число указанное в TextBox2 '.Replace(«,», «.») — меняем запятые на точки, т.к. в VB в качестве десятичного разделителя используются точки myCodeBody.AppendLine(String.Format("Return {0}", выражение)) myCodeBody.AppendLine("End Function") myCodeBody.AppendLine("End Class") 'компилируем Dim myResult As CompilerResults = myCode.CompileAssemblyFromSource(myPar, myCodeBody.ToString()) If myResult.Errors.HasErrors Then 'какие-то ошибки For i As Integer = 0 To myResult.Errors.Count - 1 If myResult.Errors(i).ErrorText = "Ожидалось выражение." Then MsgBox(myResult.Errors(i).ErrorText, MsgBoxStyle.Critical, "Ошибка") End If Next Return "Ошибка!" End If 'ошибок нет, выдергиваем наш класс Dim myAsm As Assembly = myResult.CompiledAssembly() Dim myCls As Object = myAsm.CreateInstance("MyCalculator", True) 'выводим результат Return myCls.Calc().ToString End Function End Class
Похожие записи:
Метки: математика, примеры, решение, Решение мат. выражений средствами .NET
Евгений
Просмотров: 6 125
Запись опубликована в 09:13
Очень хорошая статья! Не могли бы вы также опубликовать статью как работать с "длинной арифметикой" средствами NET?