czwartek, 23 września 2010

AroLibraries

Pisząc kod bardzo często powtarzam tą samą sentencje kodu.
Wraz w c#3.0 pojawiły się extension methods, które ukrywają kod.
Standardowy przykład to zastosowanie konwersji z typu string na int.

string valueString="1";
int valueInt;
int.TryParse(valueString, out valueInt); // valueInt == 1


to zapisujemy w postaci:
string valueString="1";
valueString.ToInt(); // == 1

Kiedy nie podoba mi się zapis:
if(boolVariable == flase )

((details["Node"] as TreeNode).Parent as TreeNodeExt).Name

Przerabiam na bardziej czytelny:
if(boolVariable.IsFalse())

details["Node"] .As<TreeNode>()
.Parent .As<TreeNodeExt>() .Name

Ale to kwestia gustu :)

Extension methods mają duże zastosowanie w LINQ to Object
NP:
Aby mieć informacje o wszystkich plikach na dysku o podanym rozszerzeniu należy napisać troszkę kodu:

static void Main(string[] args)
{
string path = @"D:\";
DirectoryInfo dr = new DirectoryInfo(path);
FileCollection = new List<FileInfo>();
FillFilesInDirectories(dr);
}

private static List<FileInfo> FileCollection = null;
private static void FillFilesInDirectories(DirectoryInfo dir)
{
var dirs = dir.GetDirectories();
foreach (var vDir in dirs)
{
FileCollection.AddRange(vDir.GetFiles());
FillFilesInDirectories(vDir);
}
}



Lub za pomocą LINQ:

static void Main(string[] args)
{
string path = @"D:\";
var FileCollection = new DirectoryInfo(path)
.GetDirectories()
.SelectRecursive(x => x.GetDirectories()) //Rekurencja
.SelectMany(x => x.GetFiles()); //Pobieramy Pliki
}


Od razu widać, że kod w LINQu jest bardziej czytelny.

Projekt rozszerzający możliwości Extension Methods można pobrać ze strony AroLibraries

Brak komentarzy:

Prześlij komentarz