C# 当没有字符保留时,如何从stdin读取?

C# 当没有字符保留时,如何从stdin读取?,c#,.net,stdin,textreader,C#,.net,Stdin,Textreader,我正在编写一个与Java类似的基本Scanner类。以下是我所拥有的(好吧,相关部分): 使用System.Text; 使用System.Collections.Generic; 名称空间系统.IO { /// /// ///扫描器是一个包装的 ///实例,使读取某些类型的值更容易 ///还利用了 ///班级。 /// /// /// 公共类扫描仪 { 私人文本阅读器; 专用队列字符缓冲区=新队列(); /// /// ///默认为从中读取 ///

我正在编写一个与Java类似的基本
Scanner
类。以下是我所拥有的(好吧,相关部分):

使用System.Text;
使用System.Collections.Generic;
名称空间系统.IO
{
/// 
///     
///扫描器是一个包装的
///实例,使读取某些类型的值更容易
///还利用了
///班级。
///     
///     
/// 
公共类扫描仪
{
私人文本阅读器;
专用队列字符缓冲区=新队列();
/// 
///     
///默认为从中读取
///     
/// 
公共扫描仪():此(Console.In)
{
}
公共扫描仪(文本阅读器)
{
这个。读者=读者;
}
公共字符Peek()
{
如果(this.CharacterBuffer.Count>0)
返回此.CharacterBuffer.Peek();
尝试
{
返回Convert.ToChar(this.Reader.Peek());
}
捕获(溢出例外)
{
抛出新的EndOfStreamException();
}
}
公共字符ReadChar()
{
如果(this.CharacterBuffer.Count>0)
返回此.CharacterBuffer.Dequeue();
尝试
{
返回Convert.ToChar(this.Reader.Read());
}
捕获(溢出例外)
{
抛出新的EndOfStreamException();
}
}
}
}
从我运行的几个测试来看,这对于真实文件非常有效,但是对于stdin它并不像预期的那样有效。如果我使用
Scanner.Peek
Scanner.ReadChar
,则在发送换行符后,
TextReader
实例认为它位于文件末尾(我认为),并抛出
EndOfStreamException
实例,因为
this.Reader.Read
this.Reader.Peek
返回
-1


如何在仍然支持true文件和
StringReader
实例的情况下强制它请求新字符?

我更改了
Peek
以反映以下代码。我不确定这是否是100%,因为我直接在这里从内存中键入了这个

public char Peek()
{
    if (this.CharacterBuffer.Count > 0)
        return this.CharacterBuffer.Peek();

    char Character
    try
    {
        Character = Convert.ToChar(this.Reader.Read());
    }
    catch (OverflowException)
    {
        throw new EndOfStreamException();
    }

    this.CharacterBuffer.Enqueue(Character);
    return Character;
}

检查
-1
并对其进行“阻止”有什么错?你是说我为什么使用try-catch?
public char Peek()
{
    if (this.CharacterBuffer.Count > 0)
        return this.CharacterBuffer.Peek();

    char Character
    try
    {
        Character = Convert.ToChar(this.Reader.Read());
    }
    catch (OverflowException)
    {
        throw new EndOfStreamException();
    }

    this.CharacterBuffer.Enqueue(Character);
    return Character;
}