Łukasz Gąsior – Blog

Web Developer – ASP.NET | ASP.NET MVC | PHP

Browsing Posts tagged C#

W mojej pierwszej „zawodowej” pracy na stanowisku programisty miałem okazję programować w VB.NET. Wbrew wielu opiniom uważam, że to bardzo przyjazny język i programuje się w nim bardzo fajnie.

Po przesiadce na C#, poza koniecznością wstawiania średnika na końcu każdej linii, zaskoczył mnie brak możliwości zdefiniowania parametru domyślnego w metodzie. Trochę to zajęło, ale i C# w końcu „dorobił” się tej funkcjonalności. Parametry domyślne w C# zostały wprowadzone w wersji C# 4.0, czyli w .NET 4.0.

continue reading…

Często dane, które posiadamy musimy odpowiednio sformatować przed ich wyświetleniem.
Jeżeli takie dane musimy zwalidować, to warto zadbać, aby walidowane dane były  w takim samym formacie jak je wyświetlamy.

Prosty przykład:

Powiedzmy, że mamy metodę pobierającą kwotę faktury:


var invoiceBalance = GetInvoiceBalance();

Kwotę tą otrzymujemy z dokładnością do 4 miejsc po przecinku.
Jednak przez wyświetleniem formatujemy ją:


litInvoiceBalance.Text = invoiceBalance.ToString("C");

Co w wyświetli nam np. 100,00 zł.
Jak widać nasza zmienna wyświetlana jest z dokładnością do 2 miejsc po przecinku.

Dodatkowo załóżmy, że jeżeli pobrana kwota jest większa od 0, umożliwimy użytkownikowi zaznaczenie RadioButton’a, czyli:


if (invoiceBalance > 0)
{
   rbMakePayment.Enabled = true;
}

Niby wszystko ok – aplikacja działa. Jeśli kwota jest większa od 0 możemy zaznaczyć RadioButton’a, a jeśli nie to nie możemy.

Problem pojawi się w sytuacji, kiedy nasza procedura zwróci np. 0,0010.
Co wówczas zrobi nasz program? Wyświetli 0,00 zł, ale jednocześnie pozwoli zaznaczyć RadioButton’a :(
Dzieje się tak, ponieważ 0,0010 zaokrąglone do dwóch miejsc po przecinku da nam 0,00, ale podczas walidowania kwota jest większa od zera.

Tego typu błędy są czasami ciężkie do wykrycia – kompilator nic nie zgłosi, a i sam błąd występuje rzadko.

Rozwiązaniem w tym przypadku jest zaokrąglenie naszej kwoty przed wyświetleniem i zwalidowaniem, czyli:

var invoiceBalance = GetInvoiceBalance();

invoiceBalance = Math.Round(invoiceBalance, 2);

litInvoiceBalance.Text = invoiceBalance.ToString("C");

if (invoiceBalance > 0)
{
   rbMakePayment.Enabled = true;
}

Warto zwrócić uwagę na takie sytuacje.

W jednym z projektów, nad którym ostatnio pracowałem, musiałem dodać referencje do pewnej biblioteki, czyli np. standardowe:

<add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

Niby wszystko ok, ale to PublicKeyToken – trochę trzeba się naklikać, żeby tą wartość uzyskać.

Jako osoba ceniąca „proste” życie napisałem program, który robi to za mnie – GetAssemblyDetails :)

GetAssemblyDetails jest standardową aplikacją konsolową, którą dodatkowo można wywołać z menu kontekstowego plików .dll oraz .exe

Jak tego programu używać:

GetAssemblyDetails -f „ścieżka do assembly” – pobiera dane assembly
np. GetAssemblyDetails -f c:\Program Files\Microsoft ASP.NET\ASP.NET MVC 1.0\Assemblies\System.Web.Mvc.dll

GetAssemblyDetails -r – dodaje program do menu kontekstowego

GetAssemblyDetails -u – usuwa program z menu kontekstowego

Wystarczy skopiować tekst wygenerowany przez program i voila :)

POBIERZ  GetAssemblyDetails.exe

I jeszcze parę screenów:

assembly1

assembly2

LINQ udostępnia metodę where, która umożliwia przeszukiwanie kolekcji tak jak foreach.

Przykładowo, zamiast:

var polishCustomers = new List<Customer>();

foreach (var customer in customers)
{
if (customer.Country == "Poland")
polishCustomers.Add(customer);
}

możemy użyć

var polishCustomers = customers.Where(x => x.Country == "Poland");

czyli krótko, zwięźle i na temat :)

Oczywiście wcześniej musimy dodać using System.Linq;

Powered by WordPress Web Design by SRS Solutions © 2012 Łukasz Gąsior – Blog Design by SRS Solutions