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