Дело не в компиляции, а в том, что происходит во время исполнения . Если вы явно не укажете культуру, будет использоваться текущая культура (во время выполнения). Я не знаю способа изменить это поведение, которое оставляет вам варианты:
- Явно указав культуру для использования
- Явное изменение текущей культуры
Обратите внимание, что даже если вы измените текущую культуру потока current , это может не повлиять на такие вещи, как пул потоков. Лично я думаю, что лучше всегда использовать культуру в явном виде.
Вы всегда можете написать свои собственные методы расширения для (скажем) вызова исходной версии, но с передачей в CultureInfo.InvariantCulture. Например:
public static string ToInvariantString(this IFormattable source, string format)
{
return source.Format(format, CultureInfo.InvariantCulture);
}
Получение этого права везде может быть болью, по общему признанию ... и чтобы избежать бокса, вы бы на самом деле хотели немного другую подпись:
public static string ToInvariantString<T>(this T source, string format)
where T : IFormattable
{
return source.Format(format, CultureInfo.InvariantCulture);
}