C#中的局部变量问题

Jav*_*ier 0 c# for-loop list local-variables

我有一些需要在for循环中分配的变量.显然,当循环退出时,C#忽略那里发生的任何事情,并且变量返回到其原始状态.具体来说,我需要它们作为List的最后一个和倒数第二个元素.这是代码:

int temp1, temp2;
for (int i = 0; i < toReturn.Count; i++) {
     if (i == toReturn.Count - 2) { // Next-to-last element
         temp1 = toReturn[i];
     } else if (i == toReturn.Count - 1) { // Last element
         temp2 = toReturn[i];
     }
}
// At this point, temp1 and temp2 are treated as uninitialized
Run Code Online (Sandbox Code Playgroud)

注意:没关系坏变量名称,它们实际上是临时变量.任何更复杂的东西都会让事情变得混乱.

现在,有两种方法(我知道)可以解决这个问题:一种是在循环退出后弄清楚如何使变量生效,另一种是在Python中做一些事情,你可以做到temp = my_list[-1]最后一个元素列表 这些可能在C#中有可能吗?

编辑:当我尝试编译时,我得到"使用未分配的局部变量'temp1'"错误.这段代码甚至没有运行,它只是坐在一个永远不会被调用的方法中.如果这有帮助,我试图在另一个循环中使用变量.

Chr*_*old 11

为什么不做......

int temp1 = 0;
int temp2 = 0;
    if (toReturn.Count > 1)
        temp1 = toReturn[toReturn.Count - 2];
    if (toReturn.Count > 0)
        temp2 = toReturn[toReturn.Count - 1];
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 5

如果toReturn.Count为0,则循环永远不会运行,并且temp1和temp2永远不会被初始化.

  • 就编译器而言并不重要,因为它无法合理地证明它永远不会发生,这就是为什么它抱怨变量被_Otenintially_未初始化.只需在声明它们时初始化它们(例如赋值0),它就会编译并运行. (4认同)