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