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ć.

Q&A – Co się stanie, gdy w bloku finally wystąpi wyjątek

Powiedzmy, ze mamy taki oto kod:

Efektem wykonania tego kodu będzie coś takiego:

Try block exception
Before exception in finally block
Finally block exception

Jak widać, wydarzą się następujące rzeczy, gdy pojawi się wyjątek w bloku finally metody ExceptionDemoMethod:
1. Komunikat z linijki 28 nie został wypisany, ponieważ kod zatrzymał się na wyjątku.
2. Jeśli nie byłoby obsługi wyjątku w linijce 5, aplikacja wysypałaby się podczas uruchamiania.
3. Na dodatek, jeśli nie byłoby obsługi wyjątku w linijce 20, stracilibyśmy informacje na jego temat a efekt wykonania takiego kodu wyglądałby dla odmiany tak:

Before exception in finally block
Finally block exception