Søg på DotNyt:
Denne blog er flyttet til www.nielsbrinch.com


mandag den 12. maj 2008

Anvendelse af Extension Methods

skrevet af Niels Brinch

En hurtig demonstration af hvordan man anvende Extension Methods som blev indført med C# 3.0.

Det går ud på at man kan føje flere funktioner til eksisterende klasser, uden f.eks. at skulle nedarve. Synes du f.eks. der mangler en metode på List<string>, jamen så tilføjer du den da bare. Det er en hel lang diskussion om hvorvidt man bør anvende dette, men den vil jeg ikke tage op her. Jeg vil udelukkende vise hvordan.

Konventionen siger, at du skal tilføje en klasse med samme navn som den klasse du extender og så sætte "Extensions" på. I dette tilfælde tilføjer jeg en klasse der hedder ListExtensions fordi jeg extender List-klassen.

image

Bemærk at klassen skal være 'static' for at kunne anvendes til dette.

Herefter tilføjer du metoden du ville ønske findes til klassen. Lad den modtage den type klasse som du extender som den første parameter med this foran. Sådan.

public static string Join(this List<string> list, string separator)

I den eksisterende List-klasse er der en Split-metode som f.eks. tager en komma-separeret streng og laver den om til en liste. Men der mangler en Join der nemt kan skabe en kommasepareret streng ud fra indholdet af et array. Det er den metode jeg savner og det er den jeg laver.

public static class ListExtensions
{
public static string Join(this List<string> list, string separator)
{
StringBuilder builder = new StringBuilder();

bool isFirst = true;

foreach (string str in list)
{
if (!isFirst)
{
builder.Append(separator);
}

builder.Append(str);

isFirst = false;
}

return builder.ToString();
}
}

I må meget gerne flame mig for ovenstående opbygning. Det ser ikke særligt elegant ud, synes jeg, men kan ikke lige komme på en mere elegant måde at kode det på.


Heldigvis er den elegang at anvende!


image


Med det samme er der intellisense som viser den nye metode, direkte på enhver instans af List<string>.


Resultatet er selvfølgelig, at vi kan få a,b,c,d,e ud af en List<string> lige så nemt som vi fik det ind.


image


Nemt og rart for den pragmatiske programmør.

5 kommentarer

torsdag den 1. maj 2008

Google CodeSearch

skrevet af Niels Brinch

Når man mangler en metode der kan noget meget specifikt, hvor man tænker "hvorfor er den ikke indbygget i .NET-frameworket?" eller "det må der da være tusindvis af andre der har kodet for længe siden", så kan man overveje at søge efter det.

De fleste .NET-programmører har nok haft held med at finde lige præcis det de ledte efter på CodeProject eller et andet sted. Men det som er på CodeProject er normalt lidt større moduler eller små prototyper på applikationer. Hvis man bare skal bruge en enkelt metode som kan noget bestemt, er det ikke så smart bare at søge på Google.

Jeg skulle f.eks. bruge en metode til at fjerne al html fra en html-side, så kun teksten er tilbage. Det er en af den slags metoder som må være lavet enormt mange gange før. Til denne type søgning er Google CodeSearch velegnet!

Man angiver det programmeringssprog man vil søge i og så et nøgleord. I mit tilfælde søgte jeg efter "strip html":

image

Resultatet er omtrent 2000 kodestumper som gør nøjagtig det jeg har brug for. Så er det bare et spørgsmål om at udvælge den jeg synes ser bedst ud og kopiere den ind i min kode. Det tog 2 minutter og det virker bare - dem der skrev det oprindeligt har formentlig afprøvet det virker, så det sparer jeg.

Jeg endte faktisk med at anvende sådan en lille sød metode til formålet:

image

4 kommentarer


 
Til forsiden

Niels Brinch

- Seneste indlæg