2012-05-21 72 views
3

是可能的默認值分配給正常參數的函數,這樣沒有給人一種「出」的說法

bool SomeFunction(int arg1 = 3, int arg2 = 4) 

可在下列任何一種方式來調用。

bool val = SomeFunction(); 
bool val = SomeFunction(6); 
bool val = SomeFunction(6,8); 

有沒有做類似這樣的東西(不僅僅是創建一個未使用的變量之外)

bool SomeOtherFunction(int arg1, out int argOut) 

可以在以下任一方式調用的方法嗎?

int outarg; 
bool val = SomeOtherFunction(4,outarg); 
bool val = SomeOtherFunction(4); 

這是所有可能的,或者如果不是,什麼是好的解決方法?謝謝。

回答

6

一個很好的解決方法是:

bool SomeOtherFunction(int arg1, out int argOut){ ... } 

bool SomeOtherFunction(int arg1) 
{ 
    int dummyArgOut; 
    return SomeOtherFunction(arg1, dummyArgOut); 
} 

我想甚至可以說其最好解決方法。

+1

您可以限定爲什麼您會說這是最好的嗎? – 3Pi

+1

@ 3Pi:因爲它爲您提供的語義與使用普通參數的默認值相同。 –

0

不,ref和out參數不能有默認值。解決方法取決於您想要達到的目標。一種方法是將其包裝到另一個方法(或重載)中,並從該方法傳遞out變量。

1

是,使用相同方法的重載版本,這並不需要第二個參數:

public bool SomeOtherFunction(int arg1) 
{ 
    int ignore; 
    return SomeOtherFunction(arg1, out ignore); 
} 
-1

有在C#中沒有默認參數,做類似的事情,你應該實現重載方法。 或者您可以使用this,您必須自己處理參數

+0

我不明白鏈接 - 「params」如何幫助實現可選的out參數? –

+0

@PaulBellora:我解決了你的一半問題(沒有關鍵字)!實現重載方法的最佳方法! –

相關問題