Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - variabili a runtime
Forum - C# / VB.NET - variabili a runtime

Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:05
Domenica, 14/12/2014
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?



PM Quote
Avatar
torn24 (Normal User)
Pro


Messaggi: 137
Iscritto: 04/01/2008

Segnala al moderatore
Postato alle 9:31
Lunedì, 15/12/2014
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.


Se si impara dai propri sbagli
non è cosi drammatico  sbagliare !
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:48
Lunedì, 15/12/2014
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.


Codice sorgente - presumibilmente C# / VB.NET

  1. string test = "ciao";
  2.  
  3.  
  4. public void prova()
  5. {
  6.  
  7. MessageBox.Show(test);
  8. }




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

PS: Ed ho risolto in questo modo


Codice sorgente - presumibilmente C++

  1. public int test1 = 10;
  2. public int test2 = 20;
  3. public int test3 = 30;
  4. public int test4 = 10;
  5.  
  6.  
  7.         private void Get_VarValue(string varname)
  8.         {
  9.             var res = this.GetType().GetField(varname).GetValue(this).ToString();
  10.  
  11.             MessageBox.Show(res.ToString());
  12.         }



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


Codice sorgente - presumibilmente C# / VB.NET

  1. 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 il 15/12/2014 alle 11:00


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:15
Lunedì, 15/12/2014
Così ottieni i valori dei campi della classe (infatti utilizzi GetField)

Più propriamente dovresti scrivere

Codice sorgente - presumibilmente C# / VB.NET

  1. private void Get_VarValue(string fieldname)
  2. {
  3.    var res = this.GetType().GetField(fieldname).GetValue(this).ToString();
  4.  
  5.    MessageBox.Show(res.ToString());
  6. }



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


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote