Питання трохи заплутане. Давайте визначимо деякі терміни:
Вираз константи є (грубо кажучи) вираз , як відомо, компілятор буде конкретне значення константи.
Буквальний представляє особливий вид постійного вираження; 123і Math.PIобидва є постійними виразами. Перше - це буквально, друге - ні.
Поле константи є членом такого типу , який ініціалізується за виразом постійна, а потім може бути використано в якості постійного вираження в іншому місці. Math.PIє прикладом постійного поля.
Локальна константа , як поле постійна, але область дії до блоку. (Подібно до того, як локальна змінна масштабується до блоку.)
Постійні поля та локальні константи повинні чітко вказувати свій тип; немає форми "var" для констант. (Сама ідея здригається; "const var" - це, очевидно, оксиморон.)
Локальні змінні не повинні вказувати свій тип; тип можна вивести з ініціалізатора. Така локальна змінна називається "неявно набраною локальною змінною".
Отже, ваше запитання: "чи є спосіб написати буквальний константний вираз типу short, який можна використовувати для ініціалізації неявно введеної локальної змінної типу short?"
Ні, немає. Ви можете явно ввести локальну змінну:
short s1 = 123;
Ви можете явно ввести локальну константу:
const short s2 = 123;
Або ви можете зробити константний вираз, який містить привід для скорочення:
var s3 = (short)123;
Або ви можете зробити локальну або польову константу і використовувати її ім'я для ініціалізатора неявно введеного локального:
var s4 = s2;
Але це ніяк не можна обійти; shortповинен десь з'являтися , або в полі, або в місцевій декларації, або в складі.