2011-01-19 52 views
27

out parametresiyle bir işlevim olduğunu varsayalım, ancak değerine ihtiyacım yok. Verilen sonuç yine de atılacaksa, gerçek parametrenin geçmesinin bir yolu var mı?Parametreyi çıkarmanın bir yolu var mı?

DÜZENLEME: soru yöntemi oluşturan kişinin perspektifinden bakacak olursak sadece Optional Output Parameters ait dupe olduğu seçildi

rağmen. Yöntemin kullanıcısıysanız, parametreyi isteğe bağlı yapmayacağınızı, yalnızca değişkeni bildirmeden kullanmayla ilgileniyorsanız. Ve bu mümkün değilken, C# 7.0 ile, yöntem çağrısında bildirmek mümkündür. Bunu yerine:

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

elde edersiniz:

TryGetValue("key", out int unusedValue); 

hatta: Bu bir cevap olarak eklendi ancak edilmelidir

TryGetValue("key", out _); 

:

  • dayana Bunu bu soru için yapın, çünkü bir dupe olarak işaretlendi;
  • sorusu, bu sorunun aslında farklı bir şey sorması gibi görünüyor.
+5

hayır hayır hayır hayır – Andrey

cevap

22

Bunu yapamazsınız, ancak geri gelen değeri kullanmanız gerektiğini söyleyen kural yoktur. Bir daha kullanamayacağınız geçici bir değişkeni geçebilirsiniz.

C# 4.0 isteğe bağlı parametrelere izin verir, ancak out parametreleri isteğe bağlı olamaz.

DÜZENLEME: BTW, ayrıca aşırı yükleme yapabilirsiniz: Aslında dışarı parametre isteğe veremeyecek olsa

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

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

Bunu kullanmak zorunda olmadığımı biliyorum. Ayrıca herhangi bir değişkeni geçmemeyi de isterim. Ancak bu cevap, teşekkür ederim. –

7

, sadece dışarı parametre olmadan fonksiyonu için bir aşırı oluşturabilir, Bu da geçici bir değişken yaratma ihtiyacını ortadan kaldıracaktır.

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

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

Bu cevap daha işlevseldir. Kullanmak ya da artık kullanmak istemiyorsanız daha sonra değişiklik yapmaya gerek yok. – elcool

+0

Ve aradığınız yöntemi sahip değilseniz, sizin için dışarı parametreleri başlatmak için bir uzantı yöntemi oluşturabilirsiniz. –

0

C# hakkında emin değilim, ancak VB.Net'te bir çıkış (byref) parametresine bir sabit geçirebilirsiniz. Yani bir tamsayıya sahipseniz, bir çıkış parametresi olarak, gerçek bir değişkeni geçmek zorunda değilsiniz, sadece 0 veya başka bir geçerli tamsayıyı geçebilirsiniz. Nesneler için, dizeleri de dahil olmak üzere Nothing (C# Null) 'da geçebilirsiniz ve her şey iyi çalışıyor. Değişkenin nerede saklandığından emin değilim, muhtemelen sadece aktardığınız diğer herhangi bir parametrede olduğu gibi yığında ve işlev çıktığında kaybolur.

+0

Denedim, maalesef işe yaramadı. 'error CS1510: Ref veya out argümanı atanabilir bir değişken olmalıdır. – MasterMastic

İlgili konular