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.
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ą
Ten wpis zamyka cykl nowości w C# 6.0. Nie widzę sensu omawiania tego samego dwa razy.