2012-06-15 22 views
6

VBA (e presumo VB) ha un tipo Variant che credo occupi più memoria, ma copre vari tipi di dati.Tipo di variante in C#

Esiste un equivalente in C#?

In una forma di Windows dire che ho avuto il seguente, come vorrei modificare il tipo di z in modo che venga eseguito ok

private void uxConvertButton_Click(object sender, EventArgs e) 
    { 
     int x = 10; 

     byte j = (byte)x; 
     upDateRTB(j); 

     long q = (long)x; 
     upDateRTB(q); 

     string m = x.ToString(); 
     upDateRTB(m); 
    } 

    void upDateRTB(long z) { 
     MessageBox.Show(this,"amount; "+z); 
    } 

risposta

10
void upDateRTB(object z) { 
    MessageBox.Show(this, "amount; " + Convert.ToString(z)); 
} 
2

La parola chiave dinamica o il tipo di oggetto potrebbe darvi il comportamento variante si vuole, ma:

In questo caso Cambierei la funzione di:

void upDateRTB(string z) { 
    MessageBox.Show(this,"amount; " + z); 
} 

Perché questo è al l il metodo ha bisogno.

+0

ok - fammi modificare la domanda. – whytheq

+0

solo la modifica del parametro in stringa non funziona, provalo. Dovrei modificare anche un altro codice allora. Ho appena intenzione di modificare l'oggetto – whytheq

+0

Qualcosa che devi considerare è l'uso della funzione. Vuoi che accetti QUALSIASI tipo? –

1

Se stai parlando "variante" tipo in C#, dare un'occhiata a dynamic tipo in .net 4.0

Ma per risolvere il vostro compito sarebbe sufficiente utilizzare z.ToString() nella vostra MessageBox.Show

2

"amount; "+z chiama implicitamente il metodo ToString su z. modo da poter utilizzare Tipo object:

void upDateRTB(object z) { 
    MessageBox.Show(this,"amount; "+z); 
} 

È inoltre possibile utilizzare dinamica, ma non vedo il punto:

void upDateRTB(dynamic z) { 
    MessageBox.Show(this,"amount; "+z); 
} 
+0

ha 'dinamico' ha avuto più overhead? è per questo che scegli "oggetto" invece? – whytheq

+0

sì, ha. dinamico ha bisogno di capire il tipo in fase di esecuzione –

5

Un parametro oggetto avrebbe accettato tutto, ma se vuoi per mantenere le variabili fortemente digitati (ed evitare la boxe nel processo), è possibile utilizzare farmaci generici:

void upDateRTB<T>(T z) { 
    MessageBox.Show(this,"amount; "+ Convert.ToString(z)); 
} 

le chiamate di metodo potrebbero rimanere esattamente lo stesso, perché il compilatore può risolvere il tipo generico in base al parametro specificato.

+0

Sono un novizio C#; questa sintassi per 'generics':' (T z) 'non è qualcosa che ho già incontrato – whytheq

Problemi correlati