La question est un peu déroutant. Nous allons définir quelques termes:
Une expression constante est (en gros) une expression connue du compilateur à une valeur constante.
Un littéral est une forme particulière de l'expression constante; 123
et Math.PI
sont à la fois des expressions constantes. Le premier est un littéral, le second ne l'est pas.
Un champ constant est un membre d'un type qui est initialisé avec une expression constante, et peut ensuite être utilisé comme une expression constante ailleurs. Math.PI
est un exemple d'un champ constant.
Une constante locale , c'est comme un champ constant, mais limitées à un bloc. (Tout comme une variable locale est limitée à un bloc.)
Champs constants et constantes locales sont tenus d'indiquer leur type explicitement; il n'y a pas de "var" formulaire pour les constantes. (L'idée même fait frissonner; un "const var" est évidemment un oxymore.)
Les variables locales ne sont pas tenus d'indiquer leur type; le type peut être inférée à partir de l'initialiseur. Une telle variable locale est appelée un "implicitement tapé la variable locale".
Si votre question est "est-il un moyen d'écrire une constante littérale de l'expression de type court qui peut être utilisé pour initialiser une tapée implicitement variable locale de type court?"
Non, il n'est pas. Vous pouvez explicitement le type de la variable locale:
short s1 = 123;
Vous pouvez taper une constante locale:
const short s2 = 123;
Ou vous pouvez faire une expression constante qui contient un casting pour court:
var s3 = (short)123;
Ou vous pouvez faire un local ou d'un champ constant et utiliser son nom pour l'initialiseur de la tapée implicitement local:
var s4 = s2;
Mais il n'y a pas moyen de contourner cela; short
doit apparaître quelque part, soit dans un champ ou un local de la déclaration ou de la distribution.