Cipher decryption and encryption
Code bloat

A simple task is simple. Almost 150 lines of code are not justified for such an easy task. You imported Linq so you arguably know about it, actually using it may do very good to your code.

A general, pseudo-code view of the caesarCipher function may be:

public static string caesarEncrypt(string text, int key) {
    return text.Map( x -&gt; alphabet.include?(x) ? shiftChar(x, key) : x );
}


shiftChar may be written as:

return alphabet [ alphabet.index(char) % alphabet.length ]


And you are done.

And caesarDecrypt is just caesarEncrypt with key = 26 - key, there is no need to write the whole thing again.