Я лично был свидетелем "", приводящего к (незначительным) проблемам дважды. Однажды это произошло из-за ошибки начинающего разработчика, плохо знакомого с командным программированием, а другая была простой опечаткой, но факт использовал string.Empty избежал бы обеих проблем.
Да, это в значительной степени суждение, но когда язык дает вам несколько способов сделать что-то, я склоняюсь к тому, который имеет наибольший контроль над компилятором и самый сильный контроль во время компиляции. То есть не"". Все дело в выражении конкретных намерений.
Если вы введете string.EMpty или Strng.Empty, компилятор сообщит вам, что вы сделали это неправильно. Немедленно. Он просто не скомпилируется. Как разработчик, вы указываете конкретное намерение, что компилятор (или другой разработчик) не может каким-либо образом неверно истолковать, а если вы сделаете это неправильно, вы не сможете создать ошибку.
Если вы наберете «», когда имеете в виду «» или наоборот, компилятор с радостью выполнит то, что вы сказали. Другой разработчик может или не сможет определить ваши конкретные намерения. Ошибка создана.
Задолго до строки. Я использовал стандартную библиотеку, определяющую константу EMPTY_STRING. Мы по-прежнему используем эту константу в операторах case, где string.Empty не допускается.
По возможности, включите компилятор для вас и исключите возможность человеческой ошибки, какой бы маленькой она ни была. ИМО, это превосходит «читабельность», как цитировали другие.
Конкретность и время компиляции. Это то, что на ужин.