Q&A – Czy możliwe jest wywołanie kilku bloków catch?

Odpowiedź brzmi – nie.

Oczywiście możemy zdefiniować różne bloki catch, ale po to by wyłapać różne rodzaje wyjątków. Jak na przykład tutaj:

Mamy możliwość wyłapania wyjątku typu MyException, jak również ogólnego Exception. Jednak w momencie, gdy złapany zostanie MyException wykonywanie kodu przechodzi do bloku finally (jeśli takowy istnieje).
W przypadku definiowania kilku rodzajów wyjątków musimy pamiętać również o tym, by definiować w kodzie bloki catch zaczynając od najbardziej specyficznego. Tak właśnie jest w powyższym przykładzie. Jeśli odwrócilibyśmy kolejność definicji tych dwóch bloków, to wszystkie wyjątki łapane by były przez blok Exception, ponieważ jest on najbardziej ogólny. Tym samym działanie naszej aplikacji byłoby totalnie niepoprawne.

Q&A – Tuple – czym jest, jak się go stosuje?

Tuple to typ generyczny, który możemy określić jako strukturę bądź sekwencję elementów różnych typów. Możemy za jego pomocą przechowywać do 8 elementów. Przykładowo wygląda to tak:

Mamy tutaj Tuple z trzema elementami – dwoma typu string i jednym typu int.
Jak możemy pobrać wartości tych elementów? Otóż, tutaj ważną rolę odgrywa kolejność, co niestety nie czyni kodu z użyciem Tuple zbyt wygodnym. Zatem chcąc wyświetlić wartości z powyższego obiektu musimy zrobić coś takiego:


Efektem wykonania będzie oczywiście:

Abc
Def
123

Jakie elementy możemy przechowywać w Tuple – nie ma ograniczeń, mogą to być również dobrze listy, słowniki czy tablice.

Inne przykłady użycia:
– Wykorzystanie jako typ anonimowy
– Zwrócenie kilku wartości z metody (jeśli nie chcemy lub nie możemy użyć parametru out)

Pewne właściwości obiektów Tuple o których warto pamiętać:
– Są immutable.
– Dwa obiekty zawierające te same dane przy porównaniu zwracają true czyli inaczej niż obiekty zwykłej klasy.

Q&A – Różnica pomiędzy metodami Convert.ToString a ToString

Najważniejsza różnica pomiędzy metodami Convert.ToString a ToString polega na tym jak działają, gdy pojawia się null.

Weźmy przykładowy kod:

Tutaj, gdy wartością zmiennej name będzie null metoda Convert.ToString(null) po prostu zwróci nam null.

Z kolei, gdy użyjemy ToString jak poniżej:

Wystąpi wyjątek, gdyż metoda ToString() nie radzi sobie w tym przypadku.

Generalnie dotyczy to wszystkich metod tego typu z klasy Convert (ToBoolean, ToDecimal, ToInt64 itd).

Q&A – Prywatny konstruktor w C# – kiedy używać i co nam daje?

Po pierwsze prywatny konstruktor w C# uniemożliwia nam utworzenie instancji klasy.
Po drugie – uniemożliwia dziedziczenie po niej.

Do czego więc może się przydać?
Otóż przydać się może, gdy chcemy utworzyć klasę, która zawierać będzie tylko metody statyczne i nie potrzebujemy, a wręcz nie chcemy, by ktokolwiek tworzył instancje tejże klasy.

Q&A – Czy można przeładować metody Action w ASP.NET MVC, jak?

Otóż na pytanie czy można przeładować metody Action w ASP.NET MVC – tak, można. A teraz powiemy sobie jak. Pierwsze co zgodnie z tym co zwykliśmy robić przychodzi nam zapewne do głowy to coś takiego:

Mianowicie mamy tutaj dwie metody o różnych sygnaturach. Zdawałoby się, że jest w porządku. Jednak próba odwołania się do tego kontrolera zaowocuje następującym błędem:
Overload error
Aplikacja nie jest w stanie rozróżnić, którą metodę wywołać.

Z pomocą przychodzi nam tutaj atrybut pozwalający określić „ActionName”. Zobaczmy jak wówczas wyglądałby kod:

Wówczas odwołanie do pierwszej metody wyglądałoby następująco i dawałoby następujący rezultat:
Overload result
Natomiast do drugiej:
Overload result

Możemy zauważyć iż w pierwszym przypadku ścieżka się nie zmieniła. Natomiast w drugim mamy w URL dodatkowy parametr – jest nim właśnie ActionName, który pozwala aplikacji rozróżnić, którą metodę wywołać.