Newsgroup: it.comp.lang.visual-basic
Titolo: Vb.net 2005] Problema con gli operatori AND e OR

problema:
Visual Basic .NET
Ho 3 variabili Boolean
Dim A as boolean = True
Dim B as boolean = False
Dim C as boolean = True
'Ora applico il confronto
If A = true and B = true Or C = true then
	'Eseguo le istruzioni
end if
Come si può procedere per fare in modo che l'utente possa variare gli
opearori And e OR ?
Cordiali saluti Roby

 opearori And e OR ?
Eh, č un bel casino.
Se la condizione č cosě semplice ti conviene fare una serie di If
Select case condition
Case A_And_B_And_C
Case A_Or_B_And_C
Case A_And_B_Or_C
Case A_Or_B_Or_C
End Select
Ciao 

 - Mostra testo tra virgolette -
Il problema e che le variabili non sono 3 ma possono arrivare anche a
10 !! :-|

 10 !! :-|
Ok, allora se riesci ad arrivare a definire la tua espressione, ad es.
If A and B Or C then
hai due possibilità:
1) se la condizione non cambia spesso puoi usare CodeDOM per compilare al 
volo la tua espressione in un assembly separato e valutare quella.
Compili (puoi farlo anche chiamando vbc.exe su un filettino .vb che ti 
scrivi ad hoc al volo) qualcosa tipo (vado a memoria)
' in una dll referenziata sia dall'assembli compilato al volo che dal tuo 
prog.
Public Interface IEsegui
    Event FaiQualcosa()
    Sub Calcola()
End Class
' nel file .vb da compilare al volo
Public Class Esegui
    ' IEsegui sta     Implements IEsegui
    Public Event FaiQualcosa() Implements IEsegui.FaiQualcosa()
    Public Sub Calcola() Implements IEsegui.Calcola()
        If <qui ci metti la tua espressione> Then
            RaiseEvent FaiQaulcosa
        End If
    End Sub
End Class
'nel tuo programma
Dim WithEvents FaroQualcosa As IEsegui
...
FaroQualcosa = TryCast(Activator.CreateInstanceFrom(mio_file_vb_compilato, 
"Namespace.Esegui"), IEsegui)
...
' nell'evento
Sub FaroQualcosa_FaiQualcosa() Handles Esegui.FaiQualcosa
    ' fai quello che devi fare
End Sub
Questa soluzione va bene come dicevo se la condizione non cambia spesso 
perchè gli assemly creati resteranno in memoria fino alla chiusura dell'app 
che li ha caricati (quindi ogni volta dovrai compilarli in un file diverso).
Essendo molto piccoli problemi di memoria non dovrebbero darne, è più una 
rottura di scatole gestire la cosa, ma se ricompili 50.000 volte...
Vantaggi: hai il massimo in prestazione nella valutazione dell'espressione.
2) ti posso passare una mia vecchia libreria per la valutazione di 
espressioni matematiche/logiche
Non compila niente, esegue tutto al volo ed è tutto sommato piuttosto veloce 
e quindi puoi fare qualcosa tipo:
Dim exp As New Expression("A And B Or C")
exp.Scope.Variables.Add("A")
exp.Scope.Variables.Add("B")
exp.Scope.Variables.Add("C")
...
exp.Scope.Variables("A").Value = True
exp.Scope.Variables("B").Value = False
exp.Scope.Variables("C").Value = True
If exp.Result.ToBoolean() Then
    ' Fai quello che devi fare
End If
In realtà hai anche una terza possibilità: referenzi come oggetto COM il 
Microsoft Script Control, da qualche parte ha una analoga funzione Eval() e 
chiami quella.
Ciao 


Ti sarei grato se  mi mandi la libreria !!! :-)
Grazie

 Ti sarei grato se  mi mandi la libreria !!! :-)
Ma ti è arrivata?
Fammi sapere qualcosa.
Ciao 

 Ciao
No non è arrivato nulla.... :-(

 No non è arrivato nulla.... :-(
Perchè sono un fesso: ho risposto al ng anzichè in privato e il messaggio è 
stato filtrato per via dell'allegato.
Ti rimando subito tutto
Ciao