Use una función para definir un parámetro opcional

8

¿Es posible usar el valor de retorno de una función en lugar de un valor específico como parámetro opcional en una función? Por ejemplo en lugar de:

public void ExampleMethod(int a, int b, int c=10)
{
}

Quiero algo como

private int ChangeC(int a, int b)
{
    return a+b;
}

public void ExampleMethod(int a, int b, int c=ChangeC(a,b))
{
}
Johannes Pertl
fuente
44
No, porque los parámetros para ese método no existen en ese contexto. Podrías usarlo en la primera línea de tu método: c = c ?? ChangeC (a, b)
Glenn van Acker
Por favor, da un ejemplo en pseudocódigo. No está claro lo que quieres lograr.
Alex
Podría tener dos sobrecargas del método: una con tres parámetros y otra con dos que llama a la primera utilizando los resultados de la llamada a la función como el tercer parámetro
PaulF

Respuestas:

8

Una de las formas:

private int ChangeC(int a, int b)
{
    return a+b; 
} 

public void ExampleMethod(int a, int b, int? c=null)
{
    c = c ?? ChangeC(a,b);
}
Gleb
fuente
16

No, esto no es posible. Para que un parámetro sea opcional, el valor debe ser una constante de tiempo de compilación. Sin embargo, puede sobrecargar el método de esta manera:

private int ChangeC(int a, int b){
    return a+b;
}

public void ExampleMethod(int a, int b, int c) {}

public void ExampleMethod(int a, int b)
{
    ExampleMethod(a, b, ChangeC(a, b));
}
MindSwipe
fuente
3

¿Es posible usar el valor de retorno de una función en lugar de un valor específico como parámetro opcional en una función?

No, no es posible. La guía de programación de C # sobre argumentos opcionales dice:

Un valor predeterminado debe ser uno de los siguientes tipos de expresiones:

  • una expresión constante

  • una expresión de la forma new ValType(), donde ValTypees un tipo de valor, como una enumeración o una estructura ;

  • una expresión de la forma default(ValType), donde ValTypees un tipo de valor.

Vea otras respuestas para soluciones alternativas.

Theraot
fuente