C# ';使用未分配的局部变量';foreach循环内部错误,返回收益率

C# ';使用未分配的局部变量';foreach循环内部错误,返回收益率,c#,yield-return,C#,Yield Return,下面的方法编译好 string DoSomething(int x) { string s; if(x < 0) s = "-"; else if(x > 0) s = "+"; else return "0"; return DoAnotherThing(s); } 对我来说,s显然是在代码到达该行时分配的。这个错误的原因可能是什么?可能是编译器错误吗 如果x等于零,则从不分配s。因此,您正

下面的方法编译好

string DoSomething(int x) {
    string s;
    if(x < 0)
        s = "-";
    else if(x > 0)
        s = "+";
    else
        return "0";

    return DoAnotherThing(s);
}

对我来说,
s
显然是在代码到达该行时分配的。这个错误的原因可能是什么?可能是编译器错误吗

如果
x
等于零,则从不分配
s
。因此,您正在将一个未赋值变量传递给
DoAnotherThing()


您可能希望else子句中的
产生中断
。请记住,
yield return
的返回方式与正常函数不同。它返回一项,但允许您继续迭代<代码>产生中断停止迭代。

这不是编译器错误。(实际上,这类错误很少,因此命中一个的机会很小。)这是代码中一个非常简单的错误

x
的值为零时,代码进入
else
块并产生
“0”
。当请求下一个值时,该方法继续并执行此行:

yield return DoAnotherThing(s);

。。。此时您还没有为
s
赋值。

谢谢!这是我不知道的。然后,
返回“0”;继续可以解决我的问题。但为了可读性,我会找到其他一些简洁的解决方案:)
yield return DoAnotherThing(s);