2008年08月18日
川俣晶の縁側ソフトウェア技術雑記 total 4949 count

.NET FrameworkのTextReader.ReadToEnd メソッドはnullを返さない

Written By: 川俣 晶連絡先

 非常に今更感のある話ですが。ReadToEnd メソッドはほとんど使ったことがなかったので、改めて調べてみました。

ReadToEnd メソッドの戻り値 §

 ReadLineメソッドはEOFの場合nullを返します。ドキュメントにもそう書いてあります。

 しかし、ReadToEnd メソッドは「nullを返す」とは書かれていません。「現在位置から TextReader の末尾までのすべての文字を含む文字列」と書かれているだけです。

 ならば、現在位置がEOFなら空文字列を返してくれる?

検証ソース §

using System;

using System.IO;

class Program

{

    static void Main(string[] args)

    {

        var reader = new StringReader("a\r\n");

        Console.WriteLine(reader.ReadLine() == null);

        Console.WriteLine(reader.ReadLine() == null);

        string s = reader.ReadToEnd();

        Console.WriteLine(s == null);

        Console.WriteLine(s.Length);

    }

}

実行結果 §

False

True

False

0

結果 §

 というわけで、ReadLineメソッドがnullを返すケースでも、ReadToEndメソッドは実体のある空文字列オブジェクトを返してきたのでした。

感想 §

 .NET Framework 1.0からサポートされたメソッドでも、知らないことは多い!

 油断禁物!! (自戒の言葉)