2010-04-05 19 views
6

quería usar algo como esto:¿Cómo cambiar un tipo de variable en C#?

if(x==5) 
{ 
    var mydb= ........ ; 
} 
else 
{ 
    var mydb = ........ ; 
} 

pero no funcionó porque no puedo declarar una variable dentro de si la declaración.

así que traté de hacer esto:

var mydb; 

if (x==5) 
{ 
    mydb= ............. ; 
} 
else 
{ 
    mydb=.............; 
} 

pero Identificación tampoco funcionó porque tenía que inicializar la variable (mibd).

Entonces la pregunta es: no necesariamente sé el tipo de la variable, ¿puedo declararla de todos modos y luego cambiar el tipo dentro de la declaración if?

Respuesta

11

No, no puedes. Las variables nunca cambian sus tipos. ¿En qué tipos estás realmente interesado? ¿Podría declarar que la variable es un tipo base común o una interfaz que ambos implementan? Si puede decirnos más sobre su situación, es posible que podamos ayudarlo más.

C# es un lenguaje estáticamente tipado (dejando aparte C# 4, que introduce tipado dinámico donde realmente lo necesita, pero vale la pena entender la forma "normal" de hacer las cosas C#). El compilador necesita saber el tipo de la variable para que pueda averiguar qué significa cada referencia. Por ejemplo, si se utiliza

string x = "text"; 
int y = x.Length; 

el compilador necesita saber que x es de tipo string para que se pueda comprobar que el tipo tiene una propiedad Length y emiten una llamada a ella en el IL.

+0

http://msdn.microsoft.com/en-us/library/dd264736%28v=VS.100%29.aspx –

+0

@drorhan: Sí, pero eso no es casi seguro que la solución aquí - I Alentaremos a los principiantes de C# a mantenerse * bien * limpios de la escritura dinámica hasta que se sientan cómodos con C# "normal" (estática). –

+0

Tal vez el tipo de objeto puede ser de ayuda. http://msdn.microsoft.com/en-us/library/9kkx3h3c%28VS.80%29.aspx –

3

C# está escrito estáticamente a menos que esté ejecutando 4.0 con dynamic specifier, por lo que es clásicamente imposible cambiar el tipo excepto a través de un polimorfismo.

+2

Las variables escritas como dinámicas aún tienen un tipo estático: el tipo dinámico. No hay forma de cambiar el tipo de una * variable *. –

1

Puede declarar el tipo de base y heredar ambos tipos de él. Pero la pregunta principal es: ¿Cómo vas a usarlo si no sabes su tipo?

+0

Polimorfismo, por supuesto. –

6

puede utilizar:

object mydb = null; 

if(x==5) 
{ 
    mydb= ........ ; 
} 
else 
{ 
    mydb = ........ ; 
} 

pero hay que desempacar o emitir el objeto a su tipo apropiado cuando se desea acceder a los campos, las propiedades, los métodos del objeto. a menos que espere C# 4 que puede facilitar el método dinámico (terminología exacta: ¿envío dinámico?) invocación

+1

A menos que se trate de un tipo de valor, no se crea ningún cuadro, por lo que el término "unbox" es inapropiado. Los tipos de valores se ponen en una caja si se usan como objetos para que puedan colocarse en el montón (normalmente los objetos de valor solo pueden vivir en la pila). – helium

+2

+1 porque esta respuesta hasta ahora parece ser la más cercana a lo que solicitó OP. Sin embargo, inicialmente debe establecer 'mydb' en' null' para evitar un error/advertencia del compilador. – stakx

1

Supongo que tiene dos tipos incompatibles de dos bibliotecas diferentes que representan una base de datos. Puede escribir una interfaz con las operaciones comunes y los adaptadores de escritura que envuelven las clases provenientes de las bibliotecas e implementan su interfaz. Que el tipo de su variable mydb podría ser esa interfaz.

Por supuesto, podría usar object como tipo para mydb y usar pruebas y moldes de tipo dinámico, pero esa sería una decisión de diseño muy mala en este caso.

0

PUEDE USAR SISTEMA.CONVERTIR CLASE como este o el uso dinámico

string possibleInt = "1234"; 
int count = Convert.ToInt32(possibleInt); 

O UTILIZAR Conversiones explícitas

En C#, puede utilizar un operador de conversión para realizar las conversiones explícitas. Un elenco especifica el tipo para convertir a, entre corchetes. La sintaxis para realizar una conversión explícita se muestra en el siguiente ejemplo de código.

DataType variableName1 = (castDataType) variableName2; 
0

Se puede utilizar como esto resultado bool = (condición)? verdadero Falso ;

var myDB = (x==5) ? true : false ; 
or 
var myDB = x==5 ? "doing something when case is true" : "doing something when case is false" ; 
Cuestiones relacionadas