Proste. Gdybyś zajrzał do dokumentacji wiedziałbyś od razu.
int.Parse przyjmuje jako argument string
sugnatura jest następująca
public static int Parse(
string s
)
https://msdn.microsoft.com/en-us/library/b3h1hf19(v=vs.110).aspx
Console.Read() zwraca int (liczba)
public static int Read()
https://msdn.microsoft.com/en-us/library/system.console.read(v=vs.110).aspx
Console.ReadLine()) zwraca string
sygnatura następująca:
public static string ReadLine()
https://msdn.microsoft.com/en-us/library/system.console.readline(v=vs.110).aspx
W pierwszym przypadku ( int.Parse(Console.Read())) podajesz do int.Parse typ int i dlatego niedziała, bo int.Parse oczekuje typu string a nie int. W drugim przypadku Console.ReadLine() zwraca string co jest ok, bo int.Parse oczekuje typu string i dostaje string z metody Console.ReadLine().