【问题标题】:What does the while (reader.Peek() != -1) condition mean?while (reader.Peek() != -1) 条件是什么意思?
【发布时间】:2020-02-23 13:14:45
【问题描述】:

在教程的帮助下,我用 C# 编写了一个 WebServer,以进一步加深我的 C# 知识

这是代码和我的问题:

    private void HandleClient(TcpClient client)
    {

        StreamReader reader = new StreamReader(client.GetStream());

        String msg = "";

        while (reader.Peek() != -1)
        {

            msg += reader.ReadLine() + "\n";
        }

        Console.WriteLine("Request: \n" + msg);
    }   

“while (reader.Peek() != -1)”中的“!=1”是什么意思?

【问题讨论】:

  • reader.Peek() 返回流中下一个字符的代码点值,如果没有更多字符,则返回 -1,也就是流的结尾。所以基本上这个只是说“虽然还有更多要阅读”。您还可以检查reader.ReadLine() 的结果,在这种情况下将返回null。更典型的循环是:string line; while ((line = reader.ReadLine()) != null) { ... }
  • Peek 如果没有要读取的字符,则返回 -1
  • 如果你真的想增加你的 C# 知识,你真的应该开始搜索文档。这一切都在那里docs.microsoft.com/en-us/dotnet/api/…我说这不是为了嘲笑你,而是因为学习如何搜索未知信息是在这个领域学习的基本步骤之一
  • 整个 while 语句可以简化为 var msg = reader.ReadToEnd();,这也更加地道。

标签: c# server backend


【解决方案1】:

reader.Peek() 告诉您流中的下一个字符没有读取它(即留在流中)

当没有更多字符时,它返回 -1。这样你就知道不会有更多的事情发生了。

此外,由于您正在读取字符流,-1 不是有效字符,因此您可以清楚地识别流结束条件,因为它不在字符的有效范围内(0 到 65535,包括边界)。

!=是c#中的不等于运算符,因此reader.Peek() != -1这一行的意思是

获取下一个字符而不将其从流中删除,并根据 -1(表示 EndOfStream)检查它。如果它们不同,则比较结果为true,否则为false

有关peek 方法的更多信息,请参阅Peek at MSDN,而有关运算符,请参阅Operators at MSDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2014-01-12
    • 1970-01-01
    • 2016-11-18
    相关资源
    最近更新 更多