Funciones de C # y parámetros opcionales

I know that in C# it is possible to define optional parameters. My question is directed at how flexible this is.

Let f be a function as below, with a mandatory and b, c optional :

class Test {
   public void f(int a, int b = 2, int c = 3) {
      //...
   }
}

Now, I know I can call the function in the following ways :

f(1) -> a equals 1, b equals 2, c equals 3

f(11,22) -> a equals 11, b equals 22, c equals 3

f(11,22,33) -> a equals 11, b equals 22, c equals 33

How do I do to not specify b, pero a y c ?

preguntado el 02 de febrero de 12 a las 10:02

I'm asking this because I need to wrap up some calls to Excel macros with .net 3.5. The annoying thing is that some of these macros have 30 or more params. In VBA, setting params selectively is easy, in C# I need to wrap those calls as I am forced to stuff unused values to Type.Missing -

It is precisely because libraries like the Excel and Word interop libraries have those methods with 30+ params that we added optional parameters to C#. Note that we also added llamado arguments, and we added the ability to elide ref arguments on calls to legacy object models. (ref arguments may not be elided on regular C# library calls.) All three features are necessary to make calls to Excel and Word look nice. -

4 Respuestas

Tratar:

f(11, c: 33)

Y echa un vistazo al documentación

Respondido 02 Feb 12, 14:02

You can prefix the parameter with the argument name:

f(1, c:3);

Respondido 02 Feb 12, 14:02

Usar argumentos nombrados:

f(a: 5, c: 6);

Although, strictly speaking in my example, you don't have to qualify the a:

f(5, c: 6);

Respondido 02 Feb 12, 14:02

You use named parameters:

f( a:100, c:300);

Respondido 02 Feb 12, 14:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.