remarks generate example c# parameter-passing out-parameters

c# - generate - ¿Hay alguna manera de omitir el parámetro?



params comments c# (3)

No estoy seguro acerca de C #, pero en VB.Net simplemente puede pasar una constante a un parámetro de salida (byref). Entonces, si tiene un entero, como parámetro de salida, no tiene que pasar una variable real, solo puede pasar 0, o cualquier otro entero válido. Para los objetos, incluidas las cadenas, puede pasar Nada (Nulo en C #) y todo funciona bien. No estoy seguro de dónde se almacena la variable, probablemente solo en la pila como en cualquier otro parámetro que pase, y desaparece cuando la función sale.

Esta pregunta ya tiene una respuesta aquí:

Supongamos que tengo una función out parámetro, pero no necesito su valor. ¿Hay una manera de no pasar ningún parámetro real si el resultado dado se tirará de todos modos?

EDITAR:

Aunque la pregunta ha sido votada para ser duplicada de los Parámetros de salida opcionales , solo lo es si se mira desde la perspectiva del creador del método. Si usted es el usuario del método, no está interesado en hacer que el parámetro sea opcional, simplemente no lo use sin declarar la variable. Y si bien esto no es posible, con C # 7.0 es posible declararlo en el método de llamada. Así que en lugar de:

int unusedValue; TryGetValue("key", out unusedValue);

usted obtiene:

TryGetValue("key", out int unusedValue);

o incluso:

TryGetValue("key", out _);

Esto debe agregarse como respuesta, pero:

  • No puedo hacer esto para esta pregunta, ya que estaba marcado como un dupe;
  • La pregunta, esta pregunta, se parece a que una víctima de algo realmente pide algo diferente.

No puede hacer esto, pero no hay ninguna regla que indique que debe usar el valor que se devuelve. Simplemente puede pasar una variable temporal que nunca volverá a usar.

C # 4.0 permite parámetros opcionales, pero out parámetros de out no pueden ser opcionales.

EDIT: BTW, también puede sobrecargar el método:

int DoStuff() { int temp; return DoStuff(out temp); } int DoStuff(out outParam) { //... }


Si bien no puede hacer que el parámetro de salida sea opcional, simplemente podría crear una sobrecarga para la función sin el parámetro de salida, lo que eliminaría la necesidad de crear una variable temporal.

public void DoSomething(int param1, out int param2) { /* Method work here */ } public void DoSomething(int param1) { int temp; DoSomething(param1, out temp); }