глобально изменить переменную C#

260
21 октября 2017, 15:28

Дело в том что у меня изменяется глобальная переменная внутри блока try, но другой блок не хочет видеть ее изменения. Изменял банально x = int.Parse(Console.ReadLine()); что делать в таком случае?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TicTac
{
    class Program
    {
        private static string Center(string str) { 
          return (String.Concat(Enumerable.Repeat(" ", (Console.WindowWidth / 2 - (str.Length / 2)))) + str);
        }
        static string welcome = "Игра крестики нолики"; 
        static void Main(string[] args)
        {
            int x;
            int y;
            int type;
            string[][] map = new string[][] {
                new string[] {" ", " ", " "},
                new string[] {" ", " ", " "},
                new string[] {" ", " ", " "}
            };

            for (int i = 1; i <= 9; i++)
            {
                    if (i % 2 == 0){
                        Console.ForegroundColor = ConsoleColor.Blue;
                        Console.Write("O ");
                    }
                    else{
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.Write("X ");
                    }
                if (i % 3 == 0)
                    Console.WriteLine();
            }
            Console.WriteLine(Center(welcome)+'\n');
            Console.WriteLine(Center("Чтобы выйти нажмите ESC"));
            while (Console.ReadKey(true).KeyChar != 27) {
                try
                {
                    x = int.Parse(Console.ReadLine());
                    y = int.Parse(Console.ReadLine());
                    type = int.Parse(Console.ReadLine());
                }
                catch (Exception e) {
                    Console.WriteLine("Это должно быть числом");
                    Console.ReadKey();
                    Environment.Exit(0);
                }
                try { 
                    char play;
                    switch (type) {
                        case 1:
                            play = 'x';
                            break;
                        case 2:
                            play = 'o';
                            break;
                        default:
                            play = ' ';
                            break;
                    }
                    map[y][x] = play.ToString(); 
                } catch(Exception e) {
                    Console.WriteLine("Переполнение");
                    Console.ReadKey();
                    Environment.Exit(0);
                }
                for (int i = 0; i < map.Length; i++)
                {
                    for (int j = 0; j < map[i].Length; j++)
                    {
                        ;
                        if (map[i][j] == "x") Console.ForegroundColor = ConsoleColor.Red; else Console.ForegroundColor = ConsoleColor.Blue;
                        Console.Write(map[i][j] + " ");
                    }
                    Console.WriteLine();
                }
            }
            Console.ReadKey();
        }
    }
}
Answer 1

Если вы на счет присвоения переменной значения в блоке try, то переменная x - должна быть инициализирована:

int x = 0; // инициализация
try {
    x = int.Parse(Console.ReadLine());
} catch {}
try {
    Console.WriteLine(x);
} catch {}
Answer 2

Как писал @AresGod, x должна быть инициализирована.

Дело в том, что C# видит сценарий, когда блок Try не сработал, поэтому он показывает ошибку в сценарии, когда не сработал блок Try(тобишь переменной не присвоено значение).

Поэтому вам нужно в месте объявления проинициализировать переменную. А по хорошему засунуть в блок Try

READ ALSO
Telegram bot сохранение фотографий

Telegram bot сохранение фотографий

Здравствуйте, сейчас пишу telegram-bot на c# и возникла следующая проблема: как сохранять картинки у пользователя на устройстве в определенной...

293
Загрузка XML в БД на C#

Загрузка XML в БД на C#

Добрый деньНеобходимо распарсить XML файл следующего вида

210
Способы применения директив #region и #endregion в C#

Способы применения директив #region и #endregion в C#

Я вот прочитал про #region и #endregion что они нужны для группировки членов классов, но более подробно не нашелХочу понять более подробно

304