Sveicināti,
Manā dvēselē iemitinājās pārmetums, kurš adresēt man personīgi. Esmu pavisam piemirsis par savu zināšanu iemūžināšanu. Ir steidzami reabilitējās. Pēc vairāku mēnešu analītiskā darba beidzot esmu ticis pie kodēšanas, jāatzīst, kodēt man patīk vairāk!
Nesen pārskatīju savu rakstu sarakstu, parādās viela jaunu rakstu tapšanai. Šoreiz paturpināšu tēmu saistībā ar kolekcijām. Saistītie raksti, http://www.dotnet.lv/blogs/am/archive/2007/08/09/ienumerable-lt-t-gt.aspx, http://www.dotnet.lv/blogs/am/archive/2008/05/22/enumerable-klase-system-linq-v-rdu-telp.aspx
Kā cilvēkam, kas uztur un pilnveido finansu nozarei paredzētas programmas, bieži jādarbojas ar sarakstiem. Un jāatzīst, ka šeit galvenā profesionalitātes pazīme slēpjas spējā rakstīt maksimāli vienkāršu un saprotamu kodu. Apskatīsim reālu piemēru. Izveidots saraks ar viena tipa objektiem.
var list = new[] { new Invoice { Amount = 10M }, new Invoice { Amount = -15M }, new Invoice { Amount = 25M } };
Klase izskatās šādi:
public class Invoice
{
public decimal Amount { get; set; }
}
Ir nepieciešamība atlasīt tikai objektus ar negatīvām vērtībām. Problēmas var atrisināts vairākos veidos. Iespējams, optimālākais izmantojot .NET Framework 2.0. Viens no īsākiem realizācijas piemēriem:
var result = new List<Invoice>(list).FindAll(i => i.Amount < 0M);
Laimīgi ir tiek cilvēki, kuriem ir iespēja darboties ar .NET Framework 3.5, pateicoties LINQ kods vel vairāk vienkāršojās . Pievienojot norādi uz vārdu telpu
using System.Linq;
Uzrakstot šādu te kodu iegūstam mums vēlamo gadījumu:
var result = list.Where(i => i.Amount < 0M);
Vel vien ļoti izplatīts gadījums, nepieciešams atlasīt pirmo vai pēdējo elementu kolekcijā
Invoice firstItem = null, lastItem = null;
if (list.Length > 0)
{
firstItem = list[0];
lastItem = list[list.Length - 1];
}
// tālāk kods, kas veic darbības ar atlasītiem elementiem
Protams var izmantot paņēmienu ar List<T>.First()FirstOrDefault() un List<T>.Last()LastOrDefault(). Bet arī šeit var tiks pielietots LINQ
using System.Linq;
Invoice firstItem = list.FirstOrDefault(), lastItem = list.LastOrDefault();
Metodēm FirstOrDefault un LastOrDefault ir iespēja padot arī filtrācijas nosacījumus.
Jau aktīvi izmantoju šīs konstrukcijas projektu realizācija, blakus parādību nav novērotas:) Tikai stipri samazinās kļūdu iespējamības, kods kļūst maksimāli caurspīdīgs:) Cerams noderēs!
Posted
Feb 20 2009, 11:50 AM
by
andrejs.mamontovs