Category Archives: News

[EN] New features in C# 7.0: local functions, ref returns and others

This is the third and the last post about new features in C# 7.0. Today I will focus on:
– local functions
– literal improvements
– ref returns
– few other minor improvements

Local functions

It means we can create local function in a method. I don’t think I will use it often. We can achieve similar effect with Func/Action delegates. Anyway it’s nice to have feature.

Literal imporvements

We can write numbers with separator _ to improve readability or use binary literals to specify bit patterns instead of hexadecimal.

Ref returns

In C# 7.0 we can use ref to return reference to the specific thing, e.g. get reference to item number 1 from an array and store this reference in local variable. I think it can be helpful mostly for game developers for passing ref to big data structures.

Few other improvements

In C# 7.0 we get more improvements. I just want to list them shortly.
– Async methods can return other types than void, Task and Task<T>,
– we can use expression bodies in more places, e.g. accessors, constructors, finalizers. We can create constructor like this

– we can throw an exception in an expression

That’s all new features that we can use in C# 7.0. Hope you use it well 😉

[EN] New features in C# 7.0: Tuples

In the previous post I wrote about out variables and pattern matching in C# 7.0. Today I will focus on another features which are Tuples.

Tuple is not new thing, we have it already in C#, but this time the newest version of C# adds tuple types and tuple literals. With C# 7.0 we can implement method looks like this

GetValues method returns tuple object that contains three fields. Let’s take a look at example

As you can see in GetValues1 method I didn’t specified names for fields, so to get value we need to use default names like Item1, Item2, …, ItemN. We can change it and add our own names for fields. Take a look at the second example of method – GetValues2. In this method I specified field names: Val1, Val2, Val3. When we use this tuple return type we have a hint from IntelliSense with our field names. Item1, Item2, Item3 fields aren’t visible, but we can use it as well and it works.

1

In addition we can assign tuple return type to new local variables, it’s called deconstructing declaration.

If we want to assign result to existing variables we can do it as well.

It’s also good to mention that if you don’t use the latest .NET Framework, but you want to use the newest Tuples, you can do it. Just install the right package from NuGet Packages – System.ValueTuple.

[EN] New features in C# 7.0: out variables, pattern matching

Some time ago I wrote about new features in C# 6.0 and now it’s time to look at the features in C# 7.0 and what news it introduces. In this post I want to focus on out variables and pattern matching.

Out variables

In C# 7.0 we can declare a variable at the point it is passed as an out argument. I have created OutVariables class which contains sample methods implementation to demonstrate how out variables work. To have better view what it simplifies here we have two methods, one is in C# 6.0 (Cs6Style) and the second one is with C# 7.0 (Cs7Style).

Pattern matching

Pattern matching is another feature. In C# 7.0 we can use patterns only in is expressions and in case clausules for now, but it will be extended in the future versions of C#. Let’s take a look at the samples below.

Here we have SampleClass and two methods. Cs7Is method presents how to use is pattern and Cs7Case method presents how to use case pattern.
As you can see using is pattern is similar to the out variables, we can declare variable in the expression and use it later.
Case pattern allows us to extend switch statement. We can switch on any type, not only primitives. We can use patterns in case clausules and these clausules can have additional conditions.
That’s it for today, in the next posts we will take a look at the other features in C# 7.0.

 

Podsumowanie gali finałowej „Daj się Poznać”

DSC_1421

Konkurs „Daj się Poznać” dobiegł końca. W sobotę odbyła się gala finałowa, która miała miejsce w siedzibie Microsoft Polska w Warszawie. Oczywiście nie mogło mnie tam zabraknąć 😉 Niestety nie udało mi się dostać do ścisłego finału, ale znalazłem się w finałowej siedemdziesiątce osób, co jest dla mnie i tak dużym sukcesem.

DSC_1422

Co do samej organizacji eventu, było super. Pomimo początkowych kilku minutowych zmagań z projektorem, obyło się bez problemów. Podczas całej gali mieliśmy okazję zobaczyć aż 18 prezentacji! Dwie z nich były przedstawione przez sponsorów mBank (Piotr Snapp) i SoftwareHut (Kamil Mijacz) i nie był to jakiś marketingowy bełkot tylko bardzo dobre prezentacje techniczne. Pozostałe prezentacje należały do uczestników DSP. Nie spodziewałem się, że wyjdzie to im tak dobrze, chyba większość osób miała już znaczny experience w występowaniu na scenie, bo wyszło naprawdę super.

DSC_1423

Dzięki firmie Microsoft nie byliśmy głodni, w przerwie na lunch mogliśmy zajdać się pizzą popijając coca-colą 🙂 Podziękowania należą się również firmie mBank, która dla każdego uczestnika gali zafundowała prezent w postaci gogli VR – Google Cardboard.
Po zakończeniu prezentacji udaliśmy się do Beerokracji na afterParty, fajnie że aż tyle osób się zjawiło.

IMG_20160618_200959

Dzięki wszystkim za miłe spędzienie czasu przy piwku 😉

Podsumowując, było bardzo fajnie. Dzięki wydarzeniu, a szczególnie afterparty, mogliśmy się wszyscy poznać i pogadać na luzie. Nie mogę się doczekać kolejnego eventu, gdzie będziemy mogli się spotkac ponownie. Tymczasem follow me on twitter: @qbasko, be in touch :]

Niech DEV moc będzie z wami!

IMG_20160618_211352

Nowości w C# 6.0

Wraz z Visual Studio 2015 pojawiła się nowa wersja języka C#, a wraz z nim kilka udogodnień. Dotyczą one tylko uproszczenia składni, nie wprowadzono nowych funkcjonalności jak w poprzednich wersjach (patrz C# 5.0 – async, await). Poniżej opiszę krótko wszystkie nowe udogodnienia, które pozostają nam do dyspozycji na ten moment Puszczam oczko

1. Initializers for auto-properties
Od teraz inicjalizacja właściwości może wyglądać tak:

2. Using static members
Możliwość użycia dyrektywy using dla składowych statycznych

3. Dictionary initializer
Nowy format zapisu kolekcji słownikowej. Przyznajcie, że teraz jest o wiele czytelniej Puszczam oczko

4. Property expressions
Nasze właściwości możemy wzbogacić lambdą.

5. Method expressions
Podobnie ma się to do metod.

6. Null-conditional operator
Przykładowo mamy metodę GetName, która przyjmuje obiekt typu Test. W ciele metody chcemy odczytać właściwość Name.

7. Await w blokach catch i finally

8. Exception filters
C# 6.0 umożliwia filtrowanie wyjątków, aby tego dokonać należy wykorzystać słowo kluczowe when

9. Nameof expressions
Umożliwia pobranie nazwy np. w tym przypadku właściwości.

Nie wymieniłem tutaj Primary constructors, ponieważ ten feature został jednak wycięty z C# 6.0. Może zostanie dodany w kolejnej wersji. Mam nadzieję, że niczego nie pominąłem z nowości w C# 6.0. Jeżeli jednak coś mi umknęło to piszcie proszę w komentarzach, wtedy postaram się zaktualizować listę Uśmiech