문제

루프 용 내부에 할당 해야하는 몇 가지 변수가 있습니다. 분명히 루프가 종료되면 C#은 그곳에서 일어난 일을 무시하고 변수는 원래 상태로 반환됩니다. 구체적으로, 나는 그들이 목록의 마지막 및 다음 요소가되어야합니다. 코드는 다음과 같습니다.

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

참고 : 불량 변수 이름을 정지시키지 마십시오. 실제로 일시적인 변수. 더 복잡한 것은 사물을 혼란스럽게 할 것입니다.

이제 이것을 해결하는 두 가지 방법이 있습니다. 하나는 루프가 종료 된 후 변수를 실시하는 방법을 알아 내고, 다른 하나는 Python과 같은 일을하는 것입니다. temp = my_list[-1] 목록의 마지막 요소를 얻으려면. C#에서 이들 중 하나가 가능합니까?

편집하다: 컴파일하려고 할 때 "할당되지 않은 로컬 변수 'Temp1'"오류를 사용합니다. 이 코드는 실행되지 않고 호출되지 않는 메소드 안에 앉아 있습니다. 이것이 도움이되면 다른 루프 내부의 변수를 사용하려고합니다.

도움이 되었습니까?

해결책

왜 그냥 ...

int temp1 = 0;
int temp2 = 0;
    if (toReturn.Count > 1)
        temp1 = toReturn[toReturn.Count - 2];
    if (toReturn.Count > 0)
        temp2 = toReturn[toReturn.Count - 1];

다른 팁

Toreturn.count가 0이면 루프는 결코 실행되지 않으며 Temp1과 Temp2는 초기화되지 않습니다.

이게 뭐야?

if (toReturn.Count > 1) {
    temp1 = toReturn[toReturn.Count - 2]
    temp2 = toReturn[toReturn.Count - 1]
}

Temp1과 Temp2를 초기 값 0 또는 초기화되지 않을 수 있기 때문에 적절한 모든 것을 제공하십시오.

int temp1 = 0; // Or some other value. Perhaps -1 is appropriate.
int temp2 = 0; 

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];
     }
}

컴파일러는 그것을 요구합니다 temp1 그리고 temp2 ~이다 확실히 할당되었습니다 그들의 가치를 읽으려고 노력하기 전에. 컴파일러는 For-Loop이 변수를 할당한다는 것을 알지 못합니다. For Loop이 전혀 실행되는지는 모릅니다. 또한 귀하의 if condition이 true.

위의 코드는이를 확인합니다 temp1 그리고 temp2 무언가에 할당되었습니다. 당신이 확실히 알고 싶다면 temp1 그리고 temp2 할당되었습니다 루프에서, 이것을 추적하는 것을 고려하십시오 :

int temp1 = 0;
int temp2 = 0;
bool temp1Assigned = false;
bool temp2Assigned = false;

for (int i = 0; i < toReturn.Count; i++) {
     if (i == toReturn.Count - 2) { // Next-to-last element
         temp1 = toReturn[i];
         temp1Assigned = true;
     } else if (i == toReturn.Count - 1) { // Last element
         temp2 = toReturn[i];
         temp2Assigned = true;
     }
}

기본값을 원한다면 :

int count = toReturn.Count;
int temp1 = count > 1 ? toReturn[count - 2] : 0;
int temp2 = count  > 0 ? toReturn[count - 1] : 0;

기본값을 신경 쓰지 않고 이전에 수표를 확인한 경우 :

int count = toReturn.Count;
int temp1 = toReturn[count - 2];
int temp2 = toReturn[count - 1];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top