sswwssww
@sswwssww

Возможна ли переинициализация переменных в C#?

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int a = 0; a < 3;a++)
            {
                Console.WriteLine(a);
            }

            int a = 3;
        }
    }
}

- получаю ошибку: "Локальная переменная или параметр с именем "a" нельзя объявить в данной области, так как это имя используется во включающей локальной области для определения локальной переменной или параметр"

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int a = 0; a < 3;a++)
            {
                Console.WriteLine(a);
            }

            a = 3;
        }
    }
}

- а так: "Имя "a" не существует в текущем контексте."
Как мне использовать "a" или переменные в C# одноразовые? :)
  • Вопрос задан
  • 207 просмотров
Решения вопроса 1
ayazer
@ayazer
Sr. Software Engineer
{
    var k = 0;
    {
        var k = 5;
    }
}
{
    {
        var k = 5;
    }
    var k = 0;
}


лучше посмотреть на вот этот пример. c точки зрения компилятора - это равнозначные ситуации
т.к. во внутреней зоне видимости возникает ситуация что объявленно 2 переменных с одинаковым именем (я сейчас говорю с точки зрения парсинга исходного кода при построении ast). И неважно что переменная в верхней зоне видимости еще даже не инициализирована. Потенциально - да, это могло бы работать иначе, но (похоже что) было решено что преимущества от данного усложнения (разрешить во внутреннем контексте объявлять уже существующие переменные при условии что они еще не были инициализированы во всех внешних контекстах) себя не оправдывают. Кроме того, уж если очень нужно сделать что-то такое то (что достаточно редкая ситуация сама по себе) - это можно разрулить ручками, т.е.
for (int a = 0; a < 3; a++)
{
    Console.WriteLine(a);
}

{
    int a = 3;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы