2011-01-19 14 views
27

Załóżmy, że mam funkcję z parametrem out, jednak nie potrzebuję jej wartości. Czy istnieje sposób na przekazanie aktualnego parametru, jeśli dany wynik i tak zostanie odrzucony?Czy istnieje sposób na pominięcie parametru?

EDIT:

Chociaż kwestia został wybrany jako dupe od Optional Output Parameters to tylko jest, jeśli spojrzeć z punktu widzenia metoda twórcy. Jeśli jesteś użytkownikiem tej metody, nie chcesz, aby parametr był opcjonalny, po prostu nie używaj go bez deklarowania zmiennej. I choć nie jest to możliwe, z C# 7.0 możliwe jest zadeklarowanie go w wywołaniu metody. Więc zamiast:

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

otrzymasz:

TryGetValue("key", out int unusedValue); 

lub nawet:

TryGetValue("key", out _); 

ten powinien być dodany jako odpowiedź, ale:

  • mogę” t zrobić to na to pytanie, ponieważ został oznaczony jako dupe;
  • pytanie, które to pytanie wydaje się być pomyłką, w rzeczywistości prosi o coś innego.
+5

no nie nie nie nie nie – Andrey

Odpowiedz

22

Nie możesz tego zrobić, ale nie ma reguły mówiącej, że musisz użyć wartości, która wraca. Możesz po prostu przekazać zmienną tymczasową, której nigdy więcej nie używasz.

C# 4.0 zezwala na opcjonalne parametry, ale parametry out nie mogą być opcjonalne.

EDIT: BTW, można również przeciążać metody:

int DoStuff() 
{ 
    int temp; 
    return DoStuff(out temp); 
} 

int DoStuff(out outParam) 
{ 
    //... 
} 
+0

Wiem, że nie muszę z niego korzystać. Chciałbym również nie przekazywać żadnej zmiennej. Jednak to jest odpowiedź, dziękuję. –

7

Chociaż nie można rzeczywiście zrobić z parametrem opcjonalne, można po prostu stworzyć przeciążenie dla funkcji bez parametru na zewnątrz, która wtedy odebrałaby potrzebę utworzenia zmiennej tymczasowej.

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

public void DoSomething(int param1) 
{ 
    int temp; 
    DoSomething(param1, out temp); 
} 
+0

Ta odpowiedź jest bardziej funkcjonalna. Nie musisz już później modyfikować, jeśli chcesz z niego korzystać lub już go nie używać. – elcool

+0

A jeśli nie jesteś właścicielem metody, do której dzwonisz, możesz utworzyć metodę rozszerzenia, która pozwala uzyskać parametry wyjściowe. –

0

Not sure about C#, ale w VB.Net można po prostu przekazać stałą do parametru wyjściowego (byref). Więc jeśli masz liczbę całkowitą, jako parametr wyjściowy, nie musisz podawać zmiennej rzeczywistej, możesz po prostu przekazać 0 lub dowolną inną prawidłową liczbę całkowitą. W przypadku obiektów, w tym łańcuchów, można po prostu przekazać Nothing (Null in C#) i wszystko działa poprawnie. Nie jestem pewien, gdzie zmienna jest przechowywana, prawdopodobnie tylko na stosie, jak w każdym innym parametrze, który przekazujesz, i znika, gdy funkcja się kończy.

+0

Próbowałem, niestety to nie zadziałało. 'error CS1510: Argument ref lub out musi być zmienną możliwą do przypisania'. – MasterMastic

Powiązane problemy