2016-10-14 7 views

Odpowiedz

7

powinien być w stanie wykonać następujące czynności:

public List<string> Index(IFormFile file) 
{ 
    var result = string.Empty; 
    using (var reader = new StreamReader(file.OpenReadStream())) 
    { 
     result = reader.ReadToEnd(); 
    } 

    return string.IsNullOrEmpty(result) 
     ? null 
     : result.Split('\n').ToList(); 
} 

Abstrakcja dla IFormFile ma metodę .OpenReadStream.

Aktualizacja

Aby zapobiec mnóstwo alokacji niepożądanych i potencjalnie dużych, powinniśmy przeczytać jeden wiersz na raz i budować naszą listę z każdej linii w ten sposób. Dodatkowo możemy zamknąć tę logikę w metodzie rozszerzenia. Akcja Index kończy się wyglądać jak ten:

public List<string> Index(IFormFile file) => file.ReadAsList(); 

Odpowiednia metoda rozszerzenie wygląda następująco:

public static List<string> ReadAsList(this IFormFile file) 
{ 
    var result = new List<string>(); 
    using (var reader = new StreamReader(file.OpenReadStream())) 
    { 
     while (reader.Peek() >= 0) 
      result.Add(reader.ReadLine()); 
    } 
    return result; 
} 

Podobnie można mieć async wersji, a także:

public static async Task<List<string>> ReadAsListAsync(this IFormFile file) 
{ 
    var result = new List<string>(); 
    using (var reader = new StreamReader(file.OpenReadStream())) 
    { 
     while (reader.Peek() >= 0) 
      result.Add(await reader.ReadLineAsync()); 
    } 
    return result; 
} 

wtedy może użyć tej wersji w ten sposób:

public Task<List<string>> Index(IFormFile file) => file.ReadAsListAsync(); 
+0

to działało, chociaż nie akceptowałoby środowiska Environment.NewLine, więc użyłem 'Split ('\ n')', coś o chęci znaku zamiast łańcucha znaków – BigOmega

+1

Dlaczego chcesz przeczytać to wszystko w jeden ciąg znaków, a następnie Podziel zrobić listę? Dlaczego nie po prostu przeczytać go wiersz po linii i dodać do listy? Powyższy kod przydziela potencjalnie gigantyczny ciąg znaków, aby następnie przydzielić tablicę, a następnie przydziela listę. – davidfowl

+0

Wielka obserwacja. Po prostu pokazywałem, jak można to zrobić, zaktualizuję kod - dzięki. –

Powiązane problemy