Похоже, это результат того, как Unity создает файл csproj, в частности версию языка, которую он устанавливает, и несоответствие между C# 8 и 7,3.
В качестве ссылки, эта функция (скрывающая переменная имена в локальных функциях) была введена в C# 8. Вот ссылка github на изменение. Что касается того, почему в проекте Unity используется C# 8, мое лучшее предположение ниже.
Если вы откроете файл csproj
, созданный Unity, вы найдете
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
а также цель 4.7.1 (независимо от настроек вашего проекта Unity)
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
и определенной константы: CSHARP_7_3_OR_NEWER
, которая является константой Unity
Из C# документов на языковых версиях вы можете обнаружить, что, хотя. NET Standard 2.0 по умолчанию равен C# 7.3, приведенное выше значение <LangVersion>
подразумевает, что язык версия, используемая в VS, будет последней, к которой она имеет доступ. Вот соответствующий бит из вышеуказанной ссылки:
latest - компилятор принимает синтаксис из последней выпущенной версии компилятора (включая минорную версию).
Так что в В конце концов, похоже, что если вы установили компилятор, который поддерживает C# 8, проект Unity будет настроен таким образом, чтобы это позволяло, хотя даже внутренне, Unity все еще использует C# 7.3.