Différence entre «\ n» et Environment.NewLine


Réponses:


203

Dépend de la plateforme. Sous Windows, il s'agit en fait de "\ r \ n".

Depuis MSDN:

Une chaîne contenant "\ r \ n" pour les plates-formes non Unix, ou une chaîne contenant "\ n" pour les plates-formes Unix.


5
Quelle plate-forme UNIX est exécutée par Microsoft .NET dans sa documentation? (Je veux dire, une partie de Mono.)
Jack

10
@Jack Vous pourriez écrire dans un fichier qui sera ouvert sur la plate-forme Unix. Ou envoyer du texte dans un paquet qui sera reçu par une plate-forme Unix. Et dans quelques mois, .net sera exécuté sur les plates-formes Unix. Ça a déjà commencé
John Demetriou

Donc, pour plus de clarté: sur une plate-forme non-Unix Environment.NewLineest \r\nmais \nest aussi appelé "nouvelle ligne". Pourquoi n'ont-ils pas simplement appelé ce dernier par son nom plus connu de "saut de ligne" et éliminé la confusion? Ils auraient pu utiliser \laussi.
rory.ap

157

Implémentation exacte de à Environment.NewLinepartir du code source:

L'implémentation dans .NET 4.6.1:

/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the given
**        platform.
**Returns: \r\n on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/
public static String NewLine {
    get {
        Contract.Ensures(Contract.Result<String>() != null);
        return "\r\n";
    }
}

la source


L'implémentation dans .NET Core:

/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the
**        given platform.
**Returns: \r\n on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/
public static String NewLine {
    get {
        Contract.Ensures(Contract.Result() != null);
#if !PLATFORM_UNIX
        return "\r\n";
#else
        return "\n";
#endif // !PLATFORM_UNIX
    }
}

source (en System.Private.CoreLib)

public static string NewLine => "\r\n";

source (en System.Runtime.Extensions)


10
ouais :) Pour une raison quelconque, je m'attendais à ce que l'implémentation .NET soit une énorme fonction compliquée
developerbmw

Compte tenu de la simplicité de la source dans ce cas, cela devrait probablement être la réponse.
Chris Walter

70

Comme d'autres l'ont mentionné, Environment.NewLineretourne une chaîne spécifique à la plate-forme pour commencer une nouvelle ligne, qui devrait être:

  • "\r\n" (\ u000D \ u000A) pour Windows
  • "\n" (\ u000A) pour Unix
  • "\r" (\ u000D) pour Mac (si une telle implémentation existait)

Notez que lors de l'écriture sur la console, Environment.NewLine n'est pas strictement nécessaire. Le flux de la console se traduira "\n"par la séquence de nouvelle ligne appropriée, si nécessaire.


L'implémentation Mac existe. Juste Mono. Fonctionne sur n'importe quoi.
Dykam

24
Juste une note, ce serait de vieux macs; nouvelle utilisation des macs (OSX)\n
BlueRaja - Danny Pflughoeft

2
@Dykam, ouais mais ça tourne vraiment lentement sur mon HP48gx
cod3monk3y

1
Comme d'autres l'ont mentionné et comme cela est visible dans la source .Net également jointe à cette question, cette réponse n'est pas correcte.
Chris Walter

2
@Blieque vient de dire que cela aurait pu être vrai en 2009, pas qu'il l'était. Je n'ai pas vérifié.
aloisdg passe à codidact.com le

23

Environment.NewLine renverra le caractère de nouvelle ligne pour la plate-forme correspondante dans laquelle votre code s'exécute

vous trouverez cela très utile lorsque vous déployez votre code sous linux sur le framework Mono


8

De la documentation ...

Une chaîne contenant "\ r \ n" pour les plates-formes non Unix, ou une chaîne contenant "\ n" pour les plates-formes Unix.


4

Environment.NewLine donnera "\ r \ n" lorsqu'il est exécuté sur Windows. Si vous générez des chaînes pour les environnements basés sur Unix, vous ne voulez pas le "\ r".


4

Vous pouvez rencontrer des problèmes lorsque vous essayez d'afficher un message multiligne séparé par "\ r \ n".

C'est toujours une bonne pratique de faire les choses de manière standard et d'utiliser Environnement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.