VBNET - Interpretare una stringa come condizione

di il
5 risposte

VBNET - Interpretare una stringa come condizione

Salve a tutti, 

scusate se il titolo non rappresenta appieno la mia problematica, cerco di spiegarla qui…spero di riuscirci.

Immaginiamo una variabile stringa 

Dim StrCond as string=""
StrCond=" A=1 and B=2"
vorrei sapere, per cortesia, se posso fare una cosa del genre
If StrCond then
   bla bla
Else
 bla bla
end if

mi viene in mente qualcosa come “evaluation” ma nn so.

Grazie a tutti.

5 Risposte

  • Re: VBNET - Interpretare una stringa come condizione

    No, non puoi, non senza una libreria esterna (a cui ti riferisco con quell'evaluate forse).

    Usare CodeDom è come sparare ad una mosca col cannone 

    Se l'espressione non usa roba .net puoi anche usare la libreria utilizzata con vb6 ma non è proprio il massimo 

    Ne abbiamo parlato in qualche thread da poco … (curioso)

    Comunque, se usi la libreria NCalc (con NuGet) puoi scrivere

            Dim eq As String = "a=5 and b=9"
            Dim nc As NCalc.Expression = New NCalc.Expression(eq)
            nc.Parameters.Add("a", 5)
            nc.Parameters.Add("b", 9)
            Dim res = nc.Evaluate()
    

    risultato in RES

  • Re: VBNET - Interpretare una stringa come condizione

    Concordo con oregon rispetto all'uso di codedom però questa libreria (codedom) permette anche , a mio avviso , di divertirsi un pò … 

  • Re: VBNET - Interpretare una stringa come condizione

    Allora ragazzi, innanzitutto grazie.

    Sto usando NCalc, mi trovo bene, ma ora ho un problema…non mi interpreta bene gli operatori condizionali “OR” “AND”  "NOT”

    questo è un esempio di codice generato con ChatGPT (e cmq anche in rete mi riporta le stesse cose) :

    Imports NCalc
    Module Module1
       Sub Main()
           Dim expression As String = "(A OR B) AND NOT C"
           Dim e As New Expression(expression)
           ' Imposta i valori delle variabili
           e.Parameters("A") = True
           e.Parameters("B") = False
           e.Parameters("C") = True
           ' Valuta l'espressione
           Dim result As Object = e.Evaluate()
           ' Mostra il risultato
           Console.WriteLine("Risultato dell'espressione: " & result.ToString())
           Console.ReadLine()
       End Sub
    End Module
    

    l'errore che mi segnala è il seguente 'mismatched input 'OR' expecting ')' 

    Cioè non mi riconosce l'OR oppure l'AND o il NOT…

    Potete aiutarmi per cortesia ?

  • Re: VBNET - Interpretare una stringa come condizione

    Allora, ho fatto un ulteriore ricerca e altre prove.

    se scrivo gli operatori in minuscolo funziona tutto…su un sito

    https://stackoverflow.com/questions/18529770/ncalc-expression-evaluation-error-for-custom-function

    l'ultima risposta sembra che si possa impostare IgnoreCase, ma non riesco..

    Dim expression As String = "(A or B) and not C"
  • Re: VBNET - Interpretare una stringa come condizione

    Puoi scrivere

    Dim e As New Expression(expression.ToLower())

    e usi i parametri a b c in minuscolo

Devi accedere o registrarti per scrivere nel forum
5 risposte