ホームページ > バックエンド開発 > C++ > LINQ は C# でのファイルの 1 行ずつの読み取りをどのように改善できるでしょうか?

LINQ は C# でのファイルの 1 行ずつの読み取りをどのように改善できるでしょうか?

DDD
リリース: 2025-01-01 07:25:10
オリジナル
834 人が閲覧しました

How Can LINQ Improve Line-by-Line File Reading in C#?

LINQ を使用した C# でのファイルの 1 行ずつの読み取り

テキスト ファイルを操作する場合、多くの場合、各行を個別に処理する必要があります。 C# には、StreamReader の使用や各行の手動読み取りなど、これを実現するいくつかの方法が用意されています。

ただし、効率と読みやすさを向上させるために、パフォーマンスを犠牲にすることなく LINQ (Language INtegrated Query) を利用できます。 LINQ は、データを操作するためのより簡潔で表現力豊かな構文を提供します。

行ごとの読み取りが必要な 2 つのシナリオ例を考えてみましょう:

最初の例:

using (var file = System.IO.File.OpenText(_LstFilename))
{
    while (!file.EndOfStream)
    {
        String line = file.ReadLine();

        // Process line
    }
}
ログイン後にコピー

2 番目例:

using (var file = System.IO.File.OpenText(datFile))
{
    Regex nameRegex = new Regex("IDENTIFY (.*)");

    while (!file.EndOfStream)
    {
        String line = file.ReadLine();

        // Process line
    }
}
ログイン後にコピー

LINQ ベースのアプローチ:

LINQ でファイルを 1 行ずつ読み取るには、反復子ブロックを使用してカスタム列挙可能シーケンス:

static IEnumerable<string> ReadFrom(string file)
{
    string line;
    using (var reader = File.OpenText(file))
    {
        while ((line = reader.ReadLine()) != null)
        {
            yield return line;
        }
    }
}
ログイン後にコピー

このメソッドは、遅延して実行される IEnumerable オブジェクトを返します。ファイル全体をメモリにバッファリングすることなく、要求されたとおりに各行を評価します。

その後、LINQ クエリを使用して行を処理できます。

var lines = ReadFrom(path);

// Process lines using LINQ
ログイン後にコピー

LINQ を使用すると、フィルタリングを適用できます。行シーケンスに対する順序付けやその他の操作により、コードがより効率的で読みやすくなります。 OrderBy や GroupBy などの操作が使用される場合、LINQ はデータをバッファーする必要があり、パフォーマンスに影響を与える可能性があることに注意してください。

以上がLINQ は C# でのファイルの 1 行ずつの読み取りをどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート