10
votes

Comment changer un type de variable en C #?

Je voulais utiliser quelque chose comme ceci: xxx

mais cela n'a pas fonctionné car je ne peux pas déclarer une variable à l'intérieur de la déclaration.

donc j'ai essayé Pour ce faire: xxx

mais je n'ai pas fonctionné non plus parce que je devais initialiser la variable (mydb).

donc la question est la suivante: i Ne connais pas nécessairement le type de variable, puis-je le déclarer de toute façon, puis modifier le type à l'intérieur de l'instruction IF?


0 commentaires

7 Réponses :


12
votes

Non, vous ne pouvez pas. Les variables ne changent jamais leurs types. Quels types êtes-vous réellement intéressé? Pourriez-vous déclarer la variable d'être un type de base commun ou une interface que les deux implémentent? Si vous pouvez nous en dire plus sur votre situation, nous pourrons peut-être vous aider davantage.

C # est une langue typée statiquement (en laissant de côté C # 4; qui introduit la dactylographie de la dactylographie où vous en avez vraiment besoin, mais il vaut la peine de comprendre le " normale "C # moyen de faire les choses en premier). Le compilateur doit connaître le type de variable de sorte que si peut déterminer la référence à chaque référence. Par exemple, si vous utilisez xxx

le compilateur doit savoir que x est de type chaîne afin qu'il puisse Vérifiez que le type a une propriété et émet un appel à l'IL.


4 commentaires

@Drorhan: Oui, mais c'est presque certainement la bonne solution ici - j'encouragerais les débutants C # pour diriger Eh bien Clear of Dynamic Typing jusqu'à ce qu'ils soient à l'aise avec "Normal" (statique) C #.


Peut-être que le type d'objet peut être de l'aide. msdn.microsoft.com/en-us/Library/ 9KKX3H3C% 28vs.80% 29.aspx


@Drorhan: C'est rarement le cas; Généralement, il y aura du type de base ou une interface commune avec la fonctionnalité souhaitée. Si les deux types n'ont vraiment rien de commun, j'aurais demandé si la même variable devrait vraiment être utilisée dans les deux cas de toute façon.


Si les deux types n'ont vraiment rien en commun, je suggérerais d'utiliser un type de syndicat discriminé, comme celui de Haskell ( hackage.hakell.org/packages/archive/base/4.2.0.0/doc/html/ ... ), ou F # 'S Série de choix <'T1,' T2> ( MSDN.MicRosoft.com /en-us/library/ee353439(vs.100).aspx ), types. rend les choses beaucoup plus explicites que objet .



5
votes

C # est statiquement saisi que si vous exécutez 4,0 avec le dynamique spécificateur , il est donc possible de modifier le type est impossible de manière classique sauf par polymorphisme.


1 commentaires

Les variables dactylographiées comme dynamiques ont toujours un type statique: le type dynamique. Il n'y a aucun moyen de changer le type d'une variable .



2
votes

Vous pouvez déclarer type de base et hériter les deux types de celui-ci. Mais la principale question est la suivante: Comment vous allez l'utiliser si vous ne connaissez pas son type?


0 commentaires

7
votes

Vous pouvez utiliser:

object mydb = null;

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


1 commentaires

Sauf si vous avez affaire à un type de valeur, aucune case n'est créée, le terme "UNBOX" est inapproprié. Les types de valeur sont placés dans une boîte si utilisé comme objet, de sorte qu'elles puissent être placées sur le tas (Normalement, les objets de valeur ne peuvent vivre que sur la pile).



2
votes

Je suppose que vous avez deux types incompatibles de deux bibliothèques différentes qui représentent toutes les deux une base de données. Vous pouvez écrire une interface avec les opérations courantes et écrire des adaptateurs qui enveloppent les classes provenant des bibliothèques et implémentent votre interface. Que le type de votre variable mydb pourrait être cette interface.

Bien sûr, vous pouvez utiliser objet en tant que type pour mydb et utiliser des tests de type dynamique et des mises en forme, mais ce serait une très mauvaise décision de conception dans ce cas.


0 commentaires

0
votes

Vous pouvez utiliser System.Convert classe forte> comme ceci ou utilisez dynamique xxx pré>

ou utiliser des conversions explicites p>

in c #, vous pouvez utiliser un opérateur de distribution pour effectuer des conversions explicites. Une fonte spécifie le type à convertir en pararsembles ronds. La syntaxe pour effectuer une conversion explicite est indiquée dans l'exemple de code suivant. P>

DataType variableName1 = (castDataType) variableName2;


0 commentaires

0
votes

Vous pouvez utiliser comme ça BOOL Résultat = (condition)? VRAI: FALSE;

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


0 commentaires