Getting keyboard input for real-time console application
You could join the two loops. I think this way your intent will be clearer, and it's not like a few extra comparisons are going to cost you anything.

//return "IEnumerable&lt;T&gt;" if all you need to do is iterate over elements
public static IEnumerable&lt;ConsoleKeyInfo&gt; GetInput()
{
    //use "var" if return type is obvious from context
    //use "HashSet&lt;T&gt;" if you need a collection of unique items
    var input = new HashSet&lt;ConsoleKeyInfo&gt;();
    var keyCount = 0;
    while (Console.KeyAvailable)
    {
        var key = Console.ReadKey(true);
        //use constants instead of magic numbers
        if (++keyCount &gt; MaxInputLength) continue;
        //no need to call "Contains", non-unique items will be dropped automatically
        input.Add(key);
    }
    //no need to convert anything
    return input;
}


But I have to question your design. Why do I have to input (and memorize?) a 10-key sequence where every key means something and the order is important? Sounds like a really poor user experience. I feel like it is not the way to go in modern applications, iddqd or not.

Edit: I forgot, that HashSet does not preserve insertion order. So if order is important, you should stick to List (your original approach).