데브허브 | DEVHUB | The Lambda Variable Capture Trap #csharp #dotnet #codingThe Lambda Variable Capture Trap #csharp #dotnet #coding
- 람다(액션)가 루프 내에서 루프 변수를 캡처할 때, 변수 자체를 참조로 캡처하여 예상치 못한 결과를 초래할 수 있습니다. 🎣
- 이 함정으로 인해 모든 액션이 루프 변수의 최종 값(예: "value three"가 세 번)을 출력하게 되어, 의도했던 순차적인 결과가 나오지 않습니다. 🤯
- 문제의 원인은 람다가 변수가 생성될 당시의 '값'이 아닌 '변수 자체'(메모리 위치)를 캡처하기 때문입니다. 람다가 실행될 시점에는 이미 변수의 값이 최종 상태로 업데이트되어 있습니다. 🔗
- 이 문제를 해결하려면 루프 내부에 새로운 지역 변수를 선언하고, 각 반복마다 루프 변수의 현재 값을 이 새로운 지역 변수에 할당해야 합니다. 🛠️
- 람다는 이제 이 새로운, 반복별 지역 변수를 캡처하게 되어, 각 액션이 해당 반복의 올바른 값을 사용하여 예상된 순차적 출력(예: "value zero, value one, value two")을 생성합니다. ✅
- 이는 C# 및 .NET에서 클로저와 루프 변수를 다룰 때 주의해야 할 일반적인 "함정" 또는 "주의사항"입니다. ⚠️