Вы можете определить свои собственные const
поля в вашей сборке следующим образом:
internal const string Empty = "";
И затем выполнить проверку по String.Empty
, ноэто в значительной степени бесполезное усилие.
Вы должны выполнять проверку везде, где у вас есть доступ к String.Empty
, и эффективно заменять ее (поскольку вы проверяете в точке сравнения, нет смысла использовать String.Empty
больше вашей версии).
Поскольку это const
, значение не может быть изменено, что хорошо, но в то же время, если значение String.Empty
делает когда-либо измениться (что маловероятно), вам придется внести изменения в свое значение, а затем перекомпилировать все , которое ссылается на это поле.
Конечно, вы можете сделать свою версиюreadonly
, но тогда вы будете уязвимы к изменению значения посредством отражения, и вы вернетесь к тому, с чего начали.
Добавьте к этому тот факт, что если String.Empty
было изменено, не толькобудут ли затронуты сравнения с полем, но я быпредставьте, что огромное количество методов в BCL просто не будет работать должным образом;глядя через Reflector, кажется, на него ссылаются несколько сотен раз в mscorlib (.NET 4.0) один :
Итак, вы сказали может попробовать и гарантировать, что значение не изменилось, но это просто не практично (это будет вечная игра в кошки-мышки), скорее всего, с точки зрения вашей программы, еслизначение String.Empty
было изменено, мир закончился бы, и программа умерла бы ужасной смертью довольно быстро, почти сразу, как только она была изменена.