Hvordan kan du bruke valgfrie parametere i C#?
Merk: Dette spørsmålet ble stilt på et tidspunkt da C# ennå ikke støttet valgfrie parametere (dvs. før C# 4).
Vi bygger et web-API som genereres programmatisk fra en C#-klasse. Klassen har metoden GetFooBar(int a, int b)
og API-et har en metode GetFooBar
som tar spørringsparametere som &a=foo &b=bar
.
Klassene må støtte valgfrie parametere, noe som ikke støttes i språket C#. Hva er den beste tilnærmingen?
455
3
I C# vil jeg normalt bruke flere former for metoden:
OPPDATERING: Dette nevnt ovenfor VAR måten jeg gjorde standardverdier med C# 2.0. Prosjektene jeg jobber med nå bruker C# 4.0 som nå direkte støtter valgfrie parametere. Her er et eksempel jeg nettopp brukte i min egen kode:
Fra dette nettstedet:
http://www.tek-tips.com/viewthread.cfm?qid=1500861&page=1
C# tillater bruk av attributtet [Optional] (fra VB, men ikke funksjonelt i C#). Så du kan ha en metode som dette:
I vår API-innpakning oppdager vi valgfrie parametere (ParameterInfo p.IsOptional) og angir en standardverdi. Målet er å merke parametere som valgfrie uten å ty til kludder som å ha "optional" i parameternavnet.
Du kan bruke metodeoverbelastning ...
Det avhenger av metoden signaturer, eksempelet jeg ga mangler "int b" eneste metoden fordi det ville ha samme signatur som "int a" metoden.
Du kan bruke Nullable typer ...
Du kan deretter sjekke, ved hjelp av a.HasValue, for å se om en parameter er angitt.
Et annet alternativ ville være å bruke en 'params' parameter.
Hvis du ønsket å gå med navngitte parametere ville måtte opprette en type for å håndtere dem, selv om jeg tror det allerede er noe som dette for web apps.