2012-06-15 25 views
6

VBA (y supongo que VB) tiene un tipo de Variante que creo que ocupa más memoria, pero abarca varios tipos de datos.Tipo de variante en C#

¿Hay un equivalente en C#?

En una forma ventanas decir que tenía la siguiente, ¿cómo iba a modificar el tipo de z para que se ejecute bien

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); 
    } 

Respuesta

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

La dinámica de palabras clave o el tipo de objeto que pudiera dar el comportamiento variante pero desea:

En este caso me gustaría cambiar la función a:

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

Porque eso es al l el método necesita.

+0

ok - déjame enmendar la pregunta. – whytheq

+0

simplemente cambiando el parámetro a cadena no funciona - pruébelo. Necesitaría enmendar otro código también entonces. Solo voy a enmendar al objeto – whytheq

+0

Algo que debes tener en cuenta es el uso de la función. ¿Quieres que acepte CUALQUIER tipo? –

1

Si estás hablando "variante" tipo en C#, echar un vistazo a dynamic tipo en .NET 4.0

Sin embargo, para la solución de su tarea sería suficiente para usar z.ToString() en su MessageBox.Show

2

"amount; "+z llama implícitamente al método ToString en z. para que pueda usar el tipo object:

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

También puede utilizar dinámico, pero no veo el punto:

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

tiene 'dynamic' tiene más sobrecarga? ¿Es por eso que eliges 'objeto' en su lugar? – whytheq

+0

sí, tiene. las necesidades dinámicas para averiguar el tipo en tiempo de ejecución –

5

un parámetro de objeto aceptaría todo, pero si desea para mantener las variables de tipo firme (y evitar el boxeo en el proceso), se puede usar genéricos:

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

las llamadas a métodos podrían seguir siendo exactamente el mismo, porque el compilador puede resolver el tipo genérico basado en el parámetro dado.

+0

Soy un novato C#; esta sintaxis para 'generics':' (T z) 'no es algo que haya encontrado todavía – whytheq

Cuestiones relacionadas