このコードがコンソールに押されたボタンを表示するためには、ボタンを2回押さなければなりません。このコードで何が間違っているのでしょうか?C#このコードで2つのキーストロークが必要なConsole.ReadKeyはなぜですか?
コードをトレースしてデバッグしようとしましたが、キーを押したときに読み取りと書き込みのブレークポイントが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;
}
}
}
}
おかげで多くのことを – user3726459