Если мы посмотрим на программу
class Program
{
static void Main()
{
Console.WriteLine("{}", "");
}
}
, то произойдет сбой с FormatException
с сообщением об ошибке Input string was not in a correct format
.
Однако, когда мы вставляем typeof(string).GetField("Empty").SetValue(null, " ");
перед строкой с Console.WriteLine
, код не работает, когда пытается найти это сообщение об ошибке.Если мы посмотрим на полную трассировку стека (включая «Показать внешний код»), то увидим, что код завершается с ошибкой System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(string fileName = " mscorlib.resources")
(обратите внимание на пространство перед mscorlib.resources).
Причина этого заключается в том, чтоManifestBasedResourceGroveler
использует метод GetResourceFileName
из ResourceManager
для поиска файла ресурса.И в GetResourceFileName
мы используем StringBuilder
для создания имени файла, а конструктор StringBuilder
начинается с String.Empty
.
public StringBuilder(int capacity)
: this(String.Empty,capacity){
}