次の操作を行うことができる必要があります:IFormFile
ため
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();
}
抽象化は.OpenReadStream
方法があります。潜在的に望ましくないと大きな割り当てのトンを防ぐため
更新
、我々は一度に一つのラインを読み、そのように各ラインからの私たちのリストを構築する必要があります。さらに、このロジックを拡張メソッドでカプセル化することもできます。
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;
}
同様にあなたにもasync
バージョンかもしれない:あなたが次に
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;
}
を、対応する拡張メソッドは次のようになり
public List<string> Index(IFormFile file) => file.ReadAsList();
:Index
アクションは、このように見える終わりますこの方法でこの方法を使用できます:
public Task<List<string>> Index(IFormFile file) => file.ReadAsListAsync();
Environment.NewLineを受け入れませんでしたので、 'Split( '\ n')'を使用しました。文字列の代わりにcharを使用する方法について – BigOmega
なぜそれをすべて1つの文字列にしてからSplitリストを作る?なぜそれを行ごとに読んでリストに追加するのはなぜですか?上記のコードは、潜在的に巨大な文字列を割り当て、次に配列を割り当て、次にリストを割り当てます。 – davidfowl
素晴らしい観察。私は単にそれができる方法を示していた、私はコードを更新する - ありがとう。 –