Navigation with arrow keys This is my attempt for C# navigation with arrow keys. Basically, when the arrow down/up key is pressed, the specified option is highlighted (so it's like a WPF/WinForms ComboBox). However, I think it looks a bit ugly, and I think many things can be made better.

I put some comments into the code, to understand better what it does.

using System;

namespace Test
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            ConsoleKeyInfo consoleKeyInfo;
            int[] intArray = new int[5];
            // Index is -1 by default. That means nothing is selected.
            // I use this variable to determine, which option is selected.
            // Then I'm calling it when moving the cursor down/up.
            int index = -1;

            for (int x = 0; x &lt; 5; x++) intArray[x] = x;
            foreach (var i in intArray) Console.WriteLine(i);
            Console.SetCursorPosition(0, 0);

            while ((consoleKeyInfo = Console.ReadKey()).Key != ConsoleKey.Enter)
            {
                if (consoleKeyInfo.Key == ConsoleKey.DownArrow)
                {
                    index++;
                    if (index == 0) // When the arrow down key is pressed first time
                    {
                        Console.SetCursorPosition(0, index);
                        Console.ResetColor();
                        Console.ForegroundColor = ConsoleColor.Blue;
                        Console.Write("\r" + new string(' ', Convert.ToString(intArray[index]).Length) + "\r"); // Clear current line
                        Console.Write(intArray[index]); // Rewrite it with matching index array item
                    }
                    else if (index &gt;= 0 &amp;&amp; index &lt; intArray.Length)
                    {
                        Console.SetCursorPosition(0, index - 1);
                        Console.ResetColor();
                        Console.Write("\r" + new string(' ', Convert.ToString(intArray[index - 1]).Length) + "\r"); // Clear previous line
                        Console.Write(intArray[index - 1]); // Rewrite it

                        Console.SetCursorPosition(0, index);
                        Console.ResetColor();
                        Console.ForegroundColor = ConsoleColor.Blue;
                        Console.Write("\r" + new string(' ', Convert.ToString(intArray[index]).Length) + "\r"); // Clear current line
                        Console.Write(intArray[index]); // Rewrite it
                    }
                    // When the index is same/greater than intArray length, keep it with the same value
                    // So the index doesn't increment
                    else if (index &gt;= intArray.Length) index = intArray.Length - 1;
                }
                else if (consoleKeyInfo.Key == ConsoleKey.UpArrow) // Up arrow is intended to work only, when the index is greater than 0 (so the second or greater option is selected)
                {
                    if (index &gt; 0) index--;
                    if (index &gt;= 0 &amp;&amp; index &lt; intArray.Length)
                    {
                        // Same as above
                        Console.SetCursorPosition(0, index + 1);
                        Console.ResetColor();
                        Console.Write("\r" + new string(' ', Convert.ToString(intArray[index + 1]).Length) + "\r");
                        Console.Write(intArray[index + 1]);

                        Console.SetCursorPosition(0, index);
                        Console.ResetColor();
                        Console.ForegroundColor = ConsoleColor.Blue;
                        Console.Write("\r" + new string(' ', Convert.ToString(intArray[index]).Length) + "\r");
                        Console.Write(intArray[index]);
                    }
                }
            }
        }
    }
}
You have lots of redundant code, and you don't use objects at all (even methods).

You should separate drawing logic from navigation logic.

Try to write something like this:

using System;
using System.Collections.Generic;
using System.Linq;

namespace Test
{
    //  logic for selecting specific option
    public class Menu
    {
        public Menu (IEnumerable&lt;string&gt; items)
        {
            Items = items.ToArray ();
        }


        public IReadOnlyList&lt;string&gt; Items { get; }

        public int SelectedIndex { get; private set; } = -1; // nothing selected

        public string SelectedOption =&gt; SelectedIndex != -1 ? Items[SelectedIndex] : null;


        public void MoveUp () =&gt; SelectedIndex = Math.Max (SelectedIndex - 1, 0);

        public void MoveDown () =&gt; SelectedIndex = Math.Min (SelectedIndex + 1, Items.Count - 1);
    }


    // logic for drawing menu list
    public class ConsoleMenuPainter
    {
        readonly Menu menu;

        public ConsoleMenuPainter (Menu menu)
        {
            this.menu = menu;
        }

        public void Paint (int x, int y)
        {
            for (int i = 0; i &lt; menu.Items.Count; i++)
            {
                Console.SetCursorPosition (x, y + i);

                var color = menu.SelectedIndex == i ? ConsoleColor.Yellow : ConsoleColor.Gray;

                Console.ForegroundColor = color;
                Console.WriteLine (menu.Items[i]);
            }
        }
    }


    internal class Program
    {
        public static void Main (string[] args)
        {
            var menu = new Menu (new string[] { "John", "Bill", "Janusz", "Grażyna", "1500", ":)" });
            var menuPainter = new ConsoleMenuPainter (menu);

            bool done = false;

            do
            {
                menuPainter.Paint (8, 5);

                var keyInfo = Console.ReadKey ();

                switch (keyInfo.Key)
                {
                    case ConsoleKey.UpArrow   : menu.MoveUp ();   break;
                    case ConsoleKey.DownArrow : menu.MoveDown (); break;
                    case ConsoleKey.Enter     : done = true;      break;
                }
            }
            while (!done);

            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine ("Selected option: " + (menu.SelectedOption ?? "(nothing)"));
            Console.ReadKey ();
        }
    }
}