我必须按两次按钮才能使此代码在控制台上显示按下的按钮。知道这段代码有什么问题吗?
我试图跟踪和调试代码,但是当我按下一个键时,读取和写入的断点并不总是在 while 循环中触发。
using System;
using System.IO;
namespace ConsoleApplication3
{
public class Program
{
private interface IReader
{
ReadResult Read();
}
private interface IWriter
{
void Write(char character);
}
public class ConsoleWriter : IWriter
{
public void Write(char character)
{
Console.Write(character);
}
}
public class FileWriter : IWriter, IDispose
{
private readonly StreamWriter _streamWriter;
public FileWriter(StreamWriter streamWriter)
{
_streamWriter = streamWriter;
}
public void Write(char character)
{
_streamWriter.Write(character);
}
public void Dispose()
{
_streamWriter.Dispose();
}
}
public class ConsoleRead : IReader
{
public ReadResult Read()
{
return new ReadResult(Console.ReadKey(true).KeyChar, Console.ReadKey(true).Key == ConsoleKey.Escape);
}
}
private static void Main(string[] args)
{
IReader reader = new ConsoleRead();
IWriter writer = new ConsoleWriter();
Copy(reader, writer);
}
private static void Copy(IReader MyReader, IWriter MyWriter)
{
while (true)
{
var readResult = MyReader.Read();
if (readResult._shouldQuit)
break;
MyWriter.Write(readResult._readCharacter);
}
}
public interface IDispose
{
void Dispose();
}
public class ReadResult
{
public readonly char _readCharacter;
public readonly bool _shouldQuit;
public ReadResult(char ReadCharacter, bool ShouldQuit)
{
_readCharacter = ReadCharacter;
_shouldQuit = ShouldQuit;
}
}
}
}
你ReadKey
在这个函数中调用了两次:
public ReadResult Read()
{
return new ReadResult(Console.ReadKey(true).KeyChar, Console.ReadKey(true).Key == ConsoleKey.Escape);
}
调用一次并存储在一个变量中:
public ReadResult Read()
{
var temp = Console.ReadKey(true);
return new ReadResult(temp.KeyChar, temp.Key == ConsoleKey.Escape);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句