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

209

Quelle est la différence entre deux, le cas échéant (par rapport à .Net)?

Prerak K
la source

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.

anthony
la source
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)

aloisdg passe à codidact.com
la source
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.

P papa
la source
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

Rony
la source
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.

JP Alioto
la source
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".

Jeff Meatball Yang
la source
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.

Yahya
la source