Pourquoi la première et la deuxième écriture fonctionne mais pas la dernière ? Est-il un moyen je peux permettre à tous les 3 d'entre eux et détecter si c’est 1, (int) 1 ou je suis passé à ? Et vraiment pourquoi on est autorisée mais la dernière ? La deuxième étant admise, mais pas les derniers vraiment souffle mon esprit.
Réponses
Trop de publicités?Les deux premiers sont des expressions constantes, le dernier ne l'est pas.
La spécification C# permet une conversion implicite de type int à court pour les constantes, mais pas pour d'autres expressions. C'est une règle raisonnable, puisque pour les constantes, le compilateur peut s'assurer que la valeur s'inscrit dans le type de cible, mais il ne peut pas normal expressions.
Cette règle est conforme à la directive que les conversions implicites doivent être sans perte.
6.1.8 Implicite de l'expression constante de conversions
Implicite de l'expression constante de conversion permet les conversions suivantes:
- Une constante de l'expression (§7.18) de type
int
peuvent être convertis en typesbyte
,byte
,short
,ushort
,uint
ouulong
, à condition que la valeur de la constante d'expression est au sein de la gamme du type de destination.- Une constante est une expression de type
long
peuvent être convertis en typeulong
, à condition que la valeur de la constante d'expression n'est pas négatif.
(Cité de la Spécification du Langage C# Version 3.0)
Il n’y a pas de conversion implicite de à
en raison de la possibilité de troncature. Toutefois, une expression de constante peuvent être traités comme ayant le type de cible le par le compilateur.
? Pas de problème : c’est clairement un valide
valeur. ? Pas tellement-ça pourrait être une valeur >
pour l’instance et le compilateur ne peut pas vérifier que dans le cas général.
un *littérale* peut être implicitement converti en [
](http://msdn.microsoft.com/en-us/library/ybs77ex4%28v=vs.80%29.aspx). Considérant que :
Vous ne peut pas convertir implicitement des types numériques non littéraux dont de taille de stockage supérieure à court
Ainsi, les deux premiers travaillent parce que la conversion implicite des littéraux est autorisée.