// dev.hobby.pl

Pułapki C# – quiz: zgadnij output 9 fragmentów kodu

Streszczenie wpisu i odnośnik do pełnej treści u źródła.

Pułapki C# – quiz: zgadnij output 9 fragmentów kodu

TL;DR

Trzy linijki kodu w klasycznej pętli `for`, gdzie domknięcia dodają do listy wartość zmiennej `i` – ile osób obstawia "012"? Poprawna odpowiedź to "333", bo C# 5 naprawił problem współdzielonej zmiennej pętli tylko dla `foreach`, nigdy dla zwykłego `for`. To pierwsza z dziewięciu zagadek w quizie, które łączy jedno: każda wygląda niewinnie, a każda regularnie trafia na produkcję.

Dalej jest podobnie boleśnie – `object a = 1000; object b = 1000; a == b` daje `false`, bo boxowanie tworzy dwa osobne obiekty na stercie, a C# w przeciwieństwie do Javy nie cache'uje ich wartości. Klasyczne `0.1 + 0.2 == 0.3` też wychodzi na `false` przez niedokładność IEEE 754 – akurat ta akurat nie jest specyfiką C#, ale przypomnienie nie zaszkodzi nikomu, kto liczy pieniądze na floatach.

Ten kod ma trzy linijki i wypisuje „333″. Nie „012″. Jeśli pomyślałeś „012″ —właśnie wpadłeś w błąd, który realnie trafia na produkcję, i to nie raz. To pierwszy post-quiz na blogu...

Czytaj cały wpis u źródła

// tagi

C#

// powiązane wpisy