C# 为什么 Console.ReadKey 需要两次击键才能在此代码中工作?

用户3726459

我必须按两次按钮才能使此代码在控制台上显示按下的按钮。知道这段代码有什么问题吗?

我试图跟踪和调试代码,但是当我按下一个键时,读取和写入的断点并不总是在 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Console.ReadKey()将'a'符号连接到下一个输出?

来自分类Dev

为什么Console.ReadKey()将'a'符号连接到下一个输出?

来自分类Dev

为什么我需要两次输入这个命令才能在 Typescript, Ionic 2 中工作?

来自分类Dev

如何将Console.Readkey转换为int C#

来自分类Dev

为什么需要单击两次按钮才能工作

来自分类Dev

C#Metro,为什么不能在“段落”中添加两次“运行”?

来自分类Dev

是否可以替换Console.ReadKey()?

来自分类Dev

为什么console.log在react js中记录两次?

来自分类Dev

为什么在此链表实现中,此C ++构造函数在同一内存位置被调用两次?

来自分类Dev

为什么需要两次应用flexbox才能使其正常工作?

来自分类Dev

为什么需要两次安装Browserify才能捆绑

来自分类Dev

为什么需要两次安装Browserify才能捆绑

来自分类Dev

是Console.ReadKey(); 好的天蓝色webjob

来自分类Dev

Console.ReadKey似乎正在读取错误的密钥?

来自分类Dev

是Console.ReadKey(); 好的天蓝色webjob

来自分类Dev

Ubuntu终端不等待Console.ReadKey()输入

来自分类Dev

为什么在%c之前需要空格才能使代码正常工作?

来自分类Dev

C-为什么此循环运行两次?

来自分类Dev

为什么`posts_path`在`rails console`中不能工作?

来自分类Dev

为什么不能为此C ++代码示例打印两次解构?

来自分类Dev

为什么此C#代码产生两次输出

来自分类Dev

为什么javascript文件加载两次console.log和alert,jquery“ click”运行两次

来自分类Dev

为什么javascript文件加载两次console.log和alert,jquery“ click”运行两次

来自分类Dev

为什么在此C ++代码中i == 0的值?

来自分类Dev

为什么检查 Console.OutputEncoding 需要这么长时间?

来自分类Dev

为什么在类成员函数C ++中两次使用关键字“ const”

来自分类Dev

为什么我在Console中得到空值?

来自分类Dev

为什么在 JavaScript 中 console.log() 输出 [object Object]?

来自分类Dev

为什么必须要执行两次Python脚本才能在CSV文件中获得完整的输出

Related 相关文章

  1. 1

    为什么Console.ReadKey()将'a'符号连接到下一个输出?

  2. 2

    为什么Console.ReadKey()将'a'符号连接到下一个输出?

  3. 3

    为什么我需要两次输入这个命令才能在 Typescript, Ionic 2 中工作?

  4. 4

    如何将Console.Readkey转换为int C#

  5. 5

    为什么需要单击两次按钮才能工作

  6. 6

    C#Metro,为什么不能在“段落”中添加两次“运行”?

  7. 7

    是否可以替换Console.ReadKey()?

  8. 8

    为什么console.log在react js中记录两次?

  9. 9

    为什么在此链表实现中,此C ++构造函数在同一内存位置被调用两次?

  10. 10

    为什么需要两次应用flexbox才能使其正常工作?

  11. 11

    为什么需要两次安装Browserify才能捆绑

  12. 12

    为什么需要两次安装Browserify才能捆绑

  13. 13

    是Console.ReadKey(); 好的天蓝色webjob

  14. 14

    Console.ReadKey似乎正在读取错误的密钥?

  15. 15

    是Console.ReadKey(); 好的天蓝色webjob

  16. 16

    Ubuntu终端不等待Console.ReadKey()输入

  17. 17

    为什么在%c之前需要空格才能使代码正常工作?

  18. 18

    C-为什么此循环运行两次?

  19. 19

    为什么`posts_path`在`rails console`中不能工作?

  20. 20

    为什么不能为此C ++代码示例打印两次解构?

  21. 21

    为什么此C#代码产生两次输出

  22. 22

    为什么javascript文件加载两次console.log和alert,jquery“ click”运行两次

  23. 23

    为什么javascript文件加载两次console.log和alert,jquery“ click”运行两次

  24. 24

    为什么在此C ++代码中i == 0的值?

  25. 25

    为什么检查 Console.OutputEncoding 需要这么长时间?

  26. 26

    为什么在类成员函数C ++中两次使用关键字“ const”

  27. 27

    为什么我在Console中得到空值?

  28. 28

    为什么在 JavaScript 中 console.log() 输出 [object Object]?

  29. 29

    为什么必须要执行两次Python脚本才能在CSV文件中获得完整的输出

热门标签

归档