C#의 로컬 변수에 대한 문제
-
18-09-2019 - |
문제
루프 용 내부에 할당 해야하는 몇 가지 변수가 있습니다. 분명히 루프가 종료되면 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];