Remove elements existing in a list built from an enum
What I like about the method is that it's implementation is straight forward and easy to understand. There are, however, a few things that may be done done differently.


The name of the method is misleading, as it does not actually check keys, but it build/returns a list of keys not pressed at the current moment.
The result of Enum.GetValues(typeof(enumType)) should never change during runtime, thus running it on every method call must be sub-optimal on recurring calls.
Using the ForEach method and using List&lt;T&gt;.Remove to remove the items looks fine, but List&lt;T&gt; might not be the best data type to remove items from. You could also use a HashSet&lt;T&gt;, which would not go all the way to Array.IndexOf&lt;T&gt;.


I tested around a bit and found that another option - not removing items from a list - is actually marginally faster.

    private readonly IReadOnlyList&lt;Keys&gt; keysToPress = Enum.GetValues(typeof(Keys)).Cast&lt;Keys&gt;().ToList();

    private List&lt;Keys&gt; CheckKeysToPressWithExcept()
    {
        // You could just use LINQ - the method probably won't get any simpler than this.
        return this.keysToPress.Except(GetKeyList()).ToList();
    }

    private List&lt;Keys&gt; CheckKeysToPressWithSet()
    {
        var keysPressed = new HashSet&lt;Keys&gt;(GetKeyList());

        // Or you can construct the resulting list manually.
        // Performs better, but is more code to read.
        var result = new List&lt;Keys&gt;(this.keysToPress.Count);
        foreach (var key in this.keysToPress)
        {
            if (!keysPressed.Contains(key))
            {
                result.Add(key);
            }
        }

        return result;
    }


In a quick benchmark, CheckKeysToPressWithSet was the fastest, a modified version of your CheckKeysToPress that uses the IReadOnlyList&lt;Keys&gt; keysToPress instead of re-creating the enum value list every time, was 2% slower and the LINQ was 14% slower.