Je voulais utiliser quelque chose comme ceci: mais cela n'a pas fonctionné car je ne peux pas déclarer une variable à l'intérieur de la déclaration. p> donc j'ai essayé Pour ce faire: p> mais je n'ai pas fonctionné non plus parce que je devais initialiser la variable (mydb). p> 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? p> p>
7 Réponses :
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 p> le compilateur doit savoir que x code> est de type
chaîne code> afin qu'il puisse Vérifiez que le type a une propriété code> code> et émet un appel à l'IL. P> P>
@Drorhan: Oui, mais c'est presque certainement la bonne solution ici - j'encouragerais les débutants C # pour diriger Eh bien i> 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.
objet code>.
C # est statiquement saisi que si vous exécutez 4,0 avec le dynamique code> spécificateur
, il est donc possible de modifier le type est impossible de manière classique sauf par polymorphisme. P>
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 i>.
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? P>
Vous pouvez utiliser:
object mydb = null; if(x==5) { mydb= ........ ; } else { mydb = ........ ; }
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).
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 Bien sûr, vous pouvez utiliser mydb code> pourrait être cette interface. P>
objet code> en tant que type pour
mydb code> 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. p>
Vous pouvez utiliser System.Convert classe forte> comme ceci ou utilisez dynamique 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;
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" ;