Pour plus de clarté, j'ai apporté une autre réponse.
J'ai fait ces deux méthodes d'extension:
ReadLines
vous permettra de lire une ligne à l'époque sans analyse de la chaîne entière dans un tableau. ReadAllLines
analysera la ligne entière dans un tableau.
Dans votre cas, vous pouvez l'utiliser comme:
var lines = source.ReadAllLines();
J'ai pris les noms de File.ReadLines
et File.ReadAllLines
donc ils doivent être compatibles avec le reste du framework .Net.
Comme une note de côté aux commentaires sur mon autre réponse, j'ai vérifié le code de StringReader.ReadLine
et cela prennent soin des deux \r\n
et \n
- mais pas l'ancien héritage Mac Os, etc. (ne devrait pas être important).
public static class StringExtensions
{
public static IEnumerable<string> ReadLines(this string data)
{
using (var sr = new StringReader(data))
{
string line;
while ((line = sr.ReadLine()) != null)
yield return line;
}
}
public static string[] ReadAllLines(this string data)
{
var res = new List<string>();
using (var sr = new StringReader(data))
{
string line;
while ((line = sr.ReadLine()) != null)
res.Add(line);
}
return res.ToArray();
}
}
(ReadAllLines
aurait pu être fait avec ReadLines.ToArray
mais j'ai décidé que les quelques lignes supplémentaires de code était mieux qu'un enveloppé IEnumerable
qui prend un certain temps de traitement)
Vous pouvez ajouter Mac: '\ r' comme bien et '\ x0085' pour IBM (voir [cette note]) (http://www.w3.org/TR/newline)) :) – Abel
Je ne savais pas qu'ils avaient' \ r' mais je vois que c'est seulement ' Mac OS <= 9' donc ils ne sont pas pertinents. –
La constante correcte est System.Environment.NewLine. –