Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测到无法访问的代码问题(但我需要在某处返回)_C#_Unreachable Code - Fatal编程技术网

C# 检测到无法访问的代码问题(但我需要在某处返回)

C# 检测到无法访问的代码问题(但我需要在某处返回),c#,unreachable-code,C#,Unreachable Code,问题如下。我正在制作一个打字游戏的变体,我的问题是我需要循环我的字符数组,检查用户是否按对了键(引入了等待用户输入的要求)。当按下右键时,我需要while循环停止并返回for循环并重新开始。但当我返回时,它会退出两个循环,并检测到无法访问的代码 我知道这意味着for循环无法完成其其余的迭代。。那么我在哪里让步/回报呢 IEnumerator TestMyCoroutine() { for (int i = 0; i < gCharArray.Length; i++) {

问题如下。我正在制作一个打字游戏的变体,我的问题是我需要循环我的字符数组,检查用户是否按对了键(引入了等待用户输入的要求)。当按下右键时,我需要while循环停止并返回for循环并重新开始。但当我返回时,它会退出两个循环,并检测到无法访问的代码

我知道这意味着for循环无法完成其其余的迭代。。那么我在哪里让步/回报呢

IEnumerator TestMyCoroutine() {

    for (int i = 0; i < gCharArray.Length; i++) {
        string charHolder = gCharArray[i].ToString();

        while (true) {

            if (Input.anyKeyDown) {

                if (Input.GetKeyDown(charHolder)) {

                } else {

                    print("Wrong Letter");

                }
                print(charHolder);

            }

            yield return null;
        }
    }
    print("Word Typing Ended");
}
IEnumerator TestMyCoroutine(){
对于(int i=0;i
收益返回
不会停止循环的运行,它只是(本质上)暂停循环并返回当前值。一旦你恢复,你仍然在循环中,因为这是一个
while(true)
循环,你将停留在那里,所以
i++
语句在理论上确实是不可到达的。而且,您永远也无法打印(“文字输入结束”)如果数组有任何元素

您可以使用传统的
break
语句退出
while
循环,或者如果您基本上想要结束枚举器的执行,也可以使用


除此之外,
yield
应用于简化返回复杂对象集合的过程,其中获取元素可能会包含一些开销,或者元素依赖于以前的状态,但其本身应该相对没有副作用。我很确定使用
yield return null
处理现有数组是对该特性的滥用


试着解释一下您实际想要做什么,可能有一种解决方案不需要让步。

让步返回并不会停止循环运行,它只是(本质上)暂停循环并返回当前值。一旦你恢复,你仍然在循环中,因为这是一个
while(true)
循环,你将停留在那里,所以
i++
语句在理论上确实是不可到达的。而且,您永远也无法打印(“文字输入结束”)如果数组有任何元素

您可以使用传统的
break
语句退出
while
循环,或者如果您基本上想要结束枚举器的执行,也可以使用


除此之外,
yield
应用于简化返回复杂对象集合的过程,其中获取元素可能会包含一些开销,或者元素依赖于以前的状态,但其本身应该相对没有副作用。我很确定使用
yield return null
处理现有数组是对该特性的滥用

试着解释一下你实际上想要做什么,也许有一个解决方案不需要让步

当按下右键时,我需要while循环停止并返回for循环并重新开始

所以<代码>继续

但当我返回时,它会退出两个循环,并检测到无法访问的代码

否,
收益返回
不退出任何循环。执行将恢复到原来的位置

您看到“检测到无法访问的代码”的原因是
while(true)
从不存在,因此它知道
i++
永远不会到达。如果您添加一个
中断
中,while(true)
:它将正常工作。您还可以添加一个
收益中断
退出整个枚举数,但这将仍然意味着永远不会到达
i++
,并将标记为无法访问

当按下右键时,我需要while循环停止并返回for循环并重新开始

所以<代码>继续

但当我返回时,它会退出两个循环,并检测到无法访问的代码

否,
收益返回
不退出任何循环。执行将恢复到原来的位置


您看到“检测到无法访问的代码”的原因是
while(true)
从不存在,因此它知道
i++
永远不会到达。如果您添加一个
中断
中,while(true)
:它将正常工作。您还可以添加一个
收益中断
退出整个枚举数,但这将仍然意味着
i++
永远不会到达,并将标记为不可到达。

在while(true){}之后,该循环中没有中断。在while(true){}之后,该循环中没有中断。次要更正:打印(
字键入结束”)是可访问的:在数组长度为零的场景中。无法访问的是
i++
。关于集合注释:
yield return
已被用作在多个框架中实现协同例程的机制,相当成功;我怀疑OP在这里就是这么做的(即,实现在这些框架中工作的代码)。i++确实是遥不可及的。所以问题仍然存在,我需要退出while循环才能到达迭代器。@MarcGravel,是的,该方法的名称就是一个提示:)我被告知,在继续循环之前,使用co例程是一种让程序停止并等待用户输入的方法。否则它会通过for循环,除非键盘上的按钮被按下,否则我的if语句永远不会执行