Приведение может происходить только между совместимыми типами. Для преобразования двух несовместимых типов необходимо выполнить преобразование.
Пример: Нельзя преобразовать строку в int и наоборот, поскольку они являются несовместимыми типами, поэтому существует способ преобразования обоих в друг друга.
int x = 5;
string str = string.Empty;
str = x.ToString(); //Convert int x into string str.
x = Convert.ToInt32(str); //Convert string str into int x.
Вместо того, чтобы писать всю историю, объясняющую разницу между приведением и преобразованием, я бы рекомендовал вам прочитать этот интересный разговор на SO. Читайте Эрик Липперт ответ . Эрик Липперт работает с Microsoft в команде разработчиков компилятора C #.