C# 6.0 New #3Nowość NR.3W wersji Visual Studio CTP 14 trzeba było trochę się namęczyć w ustawieniach projektu, aby można było pisać w C# 6.0.

Teraz jednak mamy wersję Visual Studio 2015 Preview. Zmieniłem framework projektu na NET 4.5.3 i C# 6.0 działa.

Czy coś w C# 6.0 jeszcze się pojawiło od tego czasu?

Okazuje się, że przegapiłem jedną funkcję. Nazywa się ona…

String interpolation.

Jeżeli chcemy wyświetlić wiele wartości naszego obiektu w określonej formie napisu, musimy skorzystać z metody string.Format.

Przynajmniej tak było do tej pory. Teraz wyrażenia string.format można skracać korzystając ze specjalnego znaku ucieczki.

“/{ właściwość }”

Poniżej znajduje się przykład użycia obu technik.

public class Person
{
    public int Height { get; set; }
    public int Weight { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }

    public override string ToString()
    {
        string r = string.Format("{0} lat {1}  {2} cm"
            , Age, Name, Height);

        return "\{Age} lat \{Name}  \{Height} cm";
    }

    public int BMI => Height / Weight;
}

W poprzednim wpisie byłem trochę zakłopotany jak korzystać z “Expression-bodied members“. Teraz jednak widzę, że są one znakomite, jeśli chcemy mieć właściwość, która zwróci określony wynik wzoru.

public int BMI => Height / Weight

Wracając jednak to string interpolation, jak dobrze działa to formatowanie napisów.

public static void Fun()
{
    string hour = "\{DateTime.Now : hh}";
}

Z datami nie widzę żadnego problemu, jeśli chcemy wyświetlić tylko godzinne.

string.format

Sprawa się komplikuje, gdy chcemy, przykładowo wyświetlić liczbę ułamkową z określoną liczbą miejsc po przecinku.

Dictionary initializer

O słownikach i ich alternatywnym sposobie tworzenia już mówiłem. Oto jak uzupełnianie wartości wyglądało wcześniej .

var result = new Newtonsoft.Json.Linq.JObject()
{
    {"height",Height }
};

Zdałem jednak sobie sprawę, że ta funkcjonalność jest bardziej intuicyjna. Zdarzyło mi się w trakcie zajęć ze studentami zapomnieć, jak wyglądał wcześniejszy sposób dodawania wartości do słownika w trakcie jego tworzenia.

public Newtonsoft.Json.Linq.JObject ToJson()
{
    var result = new Newtonsoft.Json.Linq.JObject();
    result["height"] = Height;
    result["weight"] = Weight;
    result["age"] = Age;
    result["name"] = Name;

    return result;
}

public Newtonsoft.Json.Linq.JObject ToJson2()
{
    var result = new Newtonsoft.Json.Linq.JObject()
    {
        ["height"] = Height,
        ["weight"] = Weight,
        ["age"] = Age,
        ["name"] = Name
    };
           
    return result;
}

Warto też dodać, że funkcjonalności C# 6.0 już nie będą przeżywały żadnych turbulencji. Istniejące funkcje języka już zostaną Szeroki uśmiech

Ten wpis zamyka cykl nowości w C# 6.0. Nie widzę sensu omawiania tego samego dwa razy.