@unknowndeal

C# Почему экземпляр класса в var инициализируется с null?

Здравствуйте, может кто объяснить почему в таком коде:
static ITelegramBotClient botClient;
        static void Main(string[] args)
        {
            botClient = new TelegramBotClient("");
            var bot = botClient.GetMeAsync().Result;
            Console.WriteLine($"Bot started. Bot name: {bot.FirstName}, {bot.Username}");
            botClient.OnMessage += Bot_OnMessage;
            botClient.StartReceiving();
            Console.WriteLine("Press any key to stop bot");
            Console.ReadKey();
            botClient.StopReceiving();


        }
        static async void Bot_OnMessage(object sender, MessageEventArgs e)
        {
            if (e.Message.Text != null)
            {
                Console.WriteLine($"Received message: {e.Message.Text} from {e.Message.Chat.FirstName}");
                Console.WriteLine($"Chat id: {e.Message.Chat.Id}");
                await botClient.SendTextMessageAsync(chatId: e.Message.Chat.Id, text: "Yes bot is working hey");
            }
        }

botClient не содержит null и работает как надо, но если добавить var:
var botClient = new TelegramBotClient("");
botClient всегда равен нулю. Никак не могу вкурить в это... Заранее спасибо.
  • Вопрос задан
  • 142 просмотра
Решения вопроса 2
У вас botClient - это глобальная переменная. Когда вы пишете var botClient вы объявляете локальную переменную с тем же именем, что и глобальная. В этом случае глобальная переменная остается равной null.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Область видимости же, вы перекрываете одну переменную другой.

Кстати что бы такого не возникало рекомендую https://www.jetbrains.com/resharper/
Это практически стандарт для любого программиста на c#

Ну и да глобальные переменные лучше именовать либо с большой буквы либо с подчеркивания в зависимости от доступности.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы