Imports System.Text.Reg ularExpressions
Imports System.Reflecti on
Module Module1
Class Expression
Private Shared methodRegex As Regex = New
Regex("^(?<Meth od>\w[\w\d_]+)\s*(\((?<Para meters>.*)\))?$ ",
RegexOptions.Co mpiled Or RegexOptions.Si ngleline)
Public Shared Function Run(ByVal obj As Object, ByVal expr As
String) As Object
Dim m As Match = methodRegex.Mat ch(expr)
Dim method As String = m.Groups("Metho d").Value
Dim parameters As String = m.Groups("Param eters").Value
Dim params As Object() = Nothing
Dim binding As BindingFlags = BindingFlags.In vokeMethod Or
BindingFlags.In stance Or BindingFlags.St atic Or BindingFlags.Pu blic Or
BindingFlags.No nPublic
Dim mi As MethodInfo = obj.GetType().G etMethod(method , binding)
If mi Is Nothing Then
Return Nothing
End If
If Not String.IsNullOr Empty(parameter s) Then
Dim stringParams As String() = parameters.Spli t(New String()
{","}, StringSplitOpti ons.RemoveEmpty Entries)
ReDim params(stringPa rams.Length - 1)
Dim parameterInfo As ParameterInfo() = mi.GetParameter s()
If params.Length <parameterInfo. Length Then
Return Nothing
End If
For Each pi As ParameterInfo In parameterInfo
params(pi.Posit ion) =
Convert.ChangeT ype(stringParam s(pi.Position), pi.ParameterTyp e)
Next
End If
Return mi.Invoke(obj, binding, Nothing, params,
Threading.Threa d.CurrentThread .CurrentCulture )
End Function
End Class
Sub Main()
Dim expr As String = "test2(10,2 5)"
Expression.Run( New TestClass, expr)
End Sub
Class TestClass
Public Function test2(ByVal i As Integer, ByVal x As Integer) As
Integer
Dim y As Integer
y = i + x
Return y
End Function
End Class
End Module
"Jan Heppen" wrote:
Hi,
I've a question. I'm developing a windows application and for the
application i need to run functions and procedures that are stored in a
database.
Here is an example that i tried to get working.
How can i execute the function that is stored in the string expr ?
-
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
-
System.EventArgs) Handles Button1.Click
-
Dim expr As String = "test2(10,25)"
-
MessageBox.Show(expr)
-
expr.run()
-
End Sub
-
Function test2(ByVal i As Integer, ByVal x As Integer) As Boolean
-
Dim y As Integer
-
y = i + x
-
Return y
-
End Function
-