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))
{
}

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);
}

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));
}

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.