Oto trzy przykładowe scenariusze, które wykorzystują moc daną nam przez Andersa Hejlsberga i spółkę:
1. Sprawdzenie, czy wszystkie textboxy są wypełnione
Przykładzik banalny i w wielu sytuacjach niepraktyczny, ale ładnie prezentujący wygodę pisania kodu “the 3.0 way”.
Stary kod:
1: private bool AreAllTextboxesFilledOldWay()
2: {
3: foreach (Control c in this.Controls)
4: {
5: TextBox tb = c as TextBox;
6: if (tb == null)
7: continue;
8:
9: if (tb.Text == string.Empty)
10: return false;
11: }
12:
13: return true;
14: }
Nowy kod:
1: private bool AreAllTextboxesFilledNewWay()
2: {
3: return this.Controls.OfType<TextBox>().Any(tb => tb.Text == string.Empty) == false;
4: }
Cool.
2. Wysłanie wyłącznie niezbędnych danych z serwera do przeglądarki w postaci JSON
Założenie: na stronie wyświetlamy DropDown z użytkownikami w określonym wieku. Wiek można podać jakkolwiek np przez wpisanie go do textboxa. Po wpisaniu wieku wysyłamy na serwer AJAXową strzałkę po dane przesłane w formacie JSON potrzebne do wyrenderowania listy. Co robiliśmy na serwerze przed erą .NET 3.5? Trzeba było mieć klasę reprezentującą tylko potrzebne do wysłania dane, trzeba było mieć klasę odpowiedzialną za serializację JSON, trzeba wreszcie było odfiltrować zbędnych użytkowników. Wraz z udogodnieniami takimi jak LINQ (filtrowanie danych), typy anonimowe (dbanie o serializowanie wyłącznie potrzebnych w przeglądarce danych), metody rozszerzające (żeby wywołanie “ToJSON()” wyglądało ładnie) i wyrażenia lambda cała operacja sprowadza się do jednej czytelnej (po zapoznaniu się z w/w mechanizmami) linijki kodu.:
1: _usersSrv.GetUsers().Where(u => u.Age == age).Select(u => new { Text = u.Name, Value = u.Id }).ToList().ToJSON();
3. SqlDataReader.HasColumn()
No i ostatni jak na razie przykład. Oto śliczny sposób na dowiedzenie się, czy DataReader posiada kolumnę o nazwie podanej w parametrze:
1: public static bool HasColumn(this SqlDataReader reader, string columnName)
2: {
3: return reader.GetSchemaTable().Rows.Cast<DataRow>().Any(dr => dr[0].ToString() == columnName);
4: }
A wy jakie macie godne pokazania praktyki związane z językowymi nowościami (o ile można w ogóle mówić o “nowościach” tyle miesięcy po premierze C# 3.0)?