Oppure

Loading
14/12/14 14:05
Thejuster
Salve ragazzi ho un piccolo problemino

Come posso re uperare una variabile nell'eseguibile e ricavarne il valore?

Esempio.
Nel sorgente ho:
Int x = 100

Ora dall'eseguibile scrivo il nome della variabile in una textbox e dovrei ricevere il suo contenuto.

So che si dovrebbe usare il reflection ma come faccio a farlo?

mire.forumfree.it/ - Mire Engine
C# UI Designer
15/12/14 8:31
torn24
Ciao, credo che non ti sei spiegato in modo chiaro :D

il fatto che in NET, si dovrebbe chiamare variabile, solo quelle locali ai metodi, di conseguenza non esistono per tutta la durata del processo, e quindi non puoi saperne il valore in qualunque momento.

Se invece si parla, di campi statici di una classe , di campi della classe principale o di un oggetto che "vive" per tutto il processo, non capisco quale sia la difficoltà, ad un dato evento si potrebbe, confrontare il testo della casella, e restituire il valore opportuno,

switch(textBox1.text)
{
case "x":
return x;
break;
case "pippo":
return oggetto.pippo;
break;
case "colore":
return classe.colore;

}


Sono certo di non aver capito,:) ma penso che anche altri potrebbero avere lo stesso problema.
aaa
15/12/14 9:48
Thejuster
Ehehe invece si può fare credimi.

Ma forse per la domanda mi sono espresso male, ma ho risolto.

E' una cosa abbastanza complicata da spiegare.

Serve per interfacciare il lua scripting per la mia applicazione.

E volevo dare la possibilità all'utente oltre a poter interpellare funzioni e classi,
gli davo la possibilità di sapere anche il valore di tutte e 3000 e passa variabili dichiarate nel progetto.
il quale normalmente non si potrebbe fare a runtime.

come solito fare, noi per richiamare un valore facciamo.




string test = "ciao";


public void prova()
{

MessageBox.Show(test);
}




Invece, ho dato la possibilità all'utente di decidere lui di sapere il valore di qualsiasi variabile.

PS: Ed ho risolto in questo modo



public int test1 = 10;
public int test2 = 20;
public int test3 = 30;
public int test4 = 10;


        private void Get_VarValue(string varname)
        {
            var res = this.GetType().GetField(varname).GetValue(this).ToString();

            MessageBox.Show(res.ToString());
        }



quindi se io al parametro varname dò "test3",
Mi cerca la variabile chiamata test3 e mi restituisce il risultato.

Grazie lo stesso per l'aiuto spero possa servire anche ad altri :)

Unico problema, E che non riesco a capire perché mi trova solo le variabili pubbliche
eppure ho inserito un flag di controllo


 var res = this.GetType().GetField(varname, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic).GetValue(this).ToString();


ma facendo in questo modo, non mi trova né le pubbliche, e né le private.

saluti
Ultima modifica effettuata da Thejuster 15/12/14 10:00
mire.forumfree.it/ - Mire Engine
C# UI Designer
15/12/14 10:15
Così ottieni i valori dei campi della classe (infatti utilizzi GetField)

Più propriamente dovresti scrivere

private void Get_VarValue(string fieldname)
{
   var res = this.GetType().GetField(fieldname).GetValue(this).ToString();
 
   MessageBox.Show(res.ToString());
}


Come già detto, non stai gestendo le variabili (locali) dei metodi.