409 votos

¿Cómo puede usted utilizar los parámetros opcionales en C#?

Estamos construyendo una web API que generadas a partir de una clase de C#. La clase tiene el método GetFooBar(int a, int b) y el API tiene un método GetFooBar tomando consulta de parámetros como &a=foo &b=bar.

Las clases a las necesidades de apoyo de los parámetros opcionales, que no se admite en C# el lenguaje. ¿Cuál es el mejor enfoque?

907voto

jitbit Puntos 8072

Sorprendió a nadie mencionó C# 4.0 parámetros opcionales, que funcionan de esta forma:

public void SomeMethod(int a, int b = 0)
{
   //some code
}

Edit: sé que en el momento en que la pregunta fue hecha, C# 4.0 no existe. Pero esta cuestión todavía ocupa el #1 en Google para "C# argumentos opcionales" eso pensé - esta respuesta vale la pena estar aquí. Lo sentimos.

118voto

Tim Jarvis Puntos 12024

Otra opción es utilizar la palabra clave params

public void DoSomething(params object[] theObjects)
{
  foreach(object o in theObjects)
  {
    // Something with the Objects…
  }
}

EDICIÓN:

Oh, Llama de...

DoSomething(this, that, theOther);

70voto

stephenbayer Puntos 5548

En C#, yo normalmente uso las múltiples formas del método:

void GetFooBar(int a) { int defaultBValue;  GetFooBar(a, defaultBValue); }
void GetFooBar(int a, int b)
{
 // whatever here
}

ACTUALIZACIÓN: Esta mencionado, FUE la forma en que me hizo valores por defecto con C# 2.0. Los proyectos en los que estoy trabajando ahora están usando C# 4.0, que ahora soporta directamente los parámetros opcionales. Aquí está un ejemplo que se me acaba de utilizar en mi propio código:

public EDIDocument ApplyEDIEnvelop(EDIVanInfo sender, 
                                   EDIVanInfo receiver, 
                                   EDIDocumentInfo info,
                                   EDIDocumentType type 
                                     = new EDIDocumentType(EDIDocTypes.X12_814),
                                   bool Production = false)
{
   // My code is here
}

40voto

Kalid Puntos 6290

Desde este sitio:

http://www.tek-tips.com/viewthread.cfm?qid=1500861&page=1

C# no permite el uso de la [Opcional] atributo (desde VB, aunque no es funcional en C#). Así que usted puede tener un método como este:

using System.Runtime.InteropServices;
public void Foo(int a, int b, [Optional] int c)
{
  ...
}

En nuestro API de contenedor, podemos detectar los parámetros opcionales (ParameterInfo p.IsOptional) y establecer un valor predeterminado. El objetivo es marcar los parámetros como opcional, sin recurrir a la kludges como tener "opcional" en el nombre del parámetro.

22voto

Kepboy Puntos 1326

Usted podría utilizar la sobrecarga de método...

GetFooBar()
GetFooBar(int a)
GetFooBar(int a, int b)

Depende del método de las firmas, el ejemplo que he dado es que falta el "int b" sólo método, porque tendría la misma firma como "int" un método.

Usted podría utilizar tipos que aceptan valores null...

GetFooBar(int? a, int? b)

Entonces, usted puede comprobar, el uso de a.HasValue, a ver si un parámetro se ha establecido.

Otra opción sería el uso de un 'params' parámetro.

GetFooBar(params object[] args)

Si quería ir con el nombre de los parámetros quisiera necesidad de crear un tipo de manejar, aunque creo que ya hay algo como esto de las aplicaciones web (no es mi área de conocimiento).

Keith.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X