【问题标题】:While loop warns of always true since value of type 'int' is never equal to 'null' of type 'int'While 循环警告始终为真,因为“int”类型的值永远不等于“int”类型的“null”
【发布时间】:2013-08-19 22:57:52
【问题描述】:

我是 C# 新手,正在研究 C# Head First 书中的一些示例,并尝试以实际的方式应用我所学的知识。我正在尝试使用以下代码读取文本文件:

private StreamReader upload;

private void Form1_Load(object sender, EventArgs e)
{
    if (File.Exists(@"C:\Users\Recon 5\Desktop\ToDo.txt"))
    {
        upload = new StreamReader(@"C:\Users\Recon 5\Desktop\ToDo.txt");
        while (upload.Peek() != null)
        {
            currentTasks.Items.Add(upload.ReadLine());
        }
        upload.Close();
    }
}

上面的代码提供了预期的结果,即将文本文件中的项目添加到列表框中。我不明白的是为什么下面的表达式:

upload.Peek() != null

正在给我以下编译器警告:

表达式的结果始终为 true,因为 int 类型的值永远不会等于 int 类型的 null

我已尝试在 Windows library 中查找响应,但了解 API 本身就是一项任务。

我想我正在寻找有用的指针来指导我的搜索或资源以帮助我自己发现答案。我确信可能有更好的方法来编写这个任务,但考虑到我对语言的理解,我觉得使用和理解我迄今为止所学的工具很重要,在这种情况下是while循环。

【问题讨论】:

  • 我认为你应该首先了解值类型和引用类型之间的区别。另外 - IntelliSense Peek() 文档应该准确地告诉你它可以返回什么值,这样你就可以知道会发生什么。
  • @Tarec,我很欣赏这个方向。还可以更多地使用 IntelliSense,它确实表明返回类型为 int,再次感谢。

标签: c# .net while-loop streamreader


【解决方案1】:
while (upload.Peek() != null)

...看起来很可疑,因为 StreamReader.Peek() 无法返回 null。我怀疑正确的行是;

while (upload.Peek() != -1)

返回值
类型:System.Int32
表示要读取的下一个字符的整数,如果没有要读取的字符或流不支持查找,则为 -1。

【讨论】:

  • 知道了,实际上,既然你指出了这一点,我研究了 reader.peek 并发现 int 错误来自此,它返回一个整数值,然后确定是否还有其他东西在文件。所以我假设如果有额外的字符,它会返回 0,如果没有,那么 -1 会停止循环?
  • @TargetofGravity 它返回下一个字符的整数值,如果流中没有下一个字符则返回-1,所以如果你想读取整个流,你只需循环直到它返回 - 1.
猜你喜欢
  • 1970-01-01
  • 2011-10-09
  • 2011-09-05
  • 2021-07-23
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多