Нужно ли заменять "\ n" на Environment.NewLine в литеральных строках, используемых в кроссплатформенных приложениях?
Если вы хотите делать кроссплатформенные вещи вообще: да .
Но ... если вы читаете из входного потока, форматирование которого известно, или если вы записываете в выходной поток, который ожидает спецификацию c символ, чем: нет .
Вроде много работы; и это вроде как. Но это хорошая практика и помогает справляться с некоторыми особыми случаями чтения файлов.
Обратите внимание, те же учетные записи для каталогов символов разделителя.
В случае /
против \
использование переменных, зависящих от платформы, более тривиально.
Что касается бонусного вопроса:
Если я не ошибаюсь ... Их знает каркас, установленный на машине.
На моем windows machine, он расположен в: mscorlib.dll
и определен как:
[__DynamicallyInvokable]
public static string NewLine
{
[__DynamicallyInvokable] get
{
return "\r\n";
}
}
Итак, он встроен в mscorelib - что говорит о том, что он известен во время сборки. Но обратите внимание; он внешний, поэтому не встроен в ваш код. Его нельзя оптимизировать до постоянной, поскольку это внешний вызов.
Но, если честно ... Мне нужно в этом разобраться.