2014-10-19 54 views
0

如何定義一個函數,以便可以選擇傳遞一個結構參數,但是能夠知道函數內部是否已通過?如何指定null作爲結構類型的默認參數

function SomeFunction(string str = null) 
{ 
    if (str == null) { ... } 
} 

調用不帶參數的上述功能將觸發if (str == null)...條件:

SomeFunction(); 

上述方法不類型的參數工作,我所試圖實現有異曲同工之處結構。鑑於以下結構:

public struct MyStruct 
{ 
    public int SomeInt; 
    public double SomeDouble; 
} 

這會產生一個錯誤,沒有規範的轉換:

public function SomeFunction(MyStruct mystruct = null) { } 

但是,當我定義功能:

public function SomeFunction(MyStruct mystruct = default(MyStruct)) { } 

並調用與功能:

SomeFunction(); 

在輸入函數mystruct時,對於SomeInt包含0,對於SomeDouble包含0.00。這些可能是合法值,這使我無法知道參數是否實際傳遞給函數或保留爲空。

我該如何定義這個參數,如果它沒有在調用中指定,我可以檢測到該函數內?

回答

3

使用空類型(任選地與DoSomething如下所示重載方法)來檢查的值是否被傳遞或沒有。

public function SomeFunction(MyStruct? mystruct) 
{ 
    if(mystruct.HasValue) 
     DoSomething(mystruct.Value); 
    else 
     DoSomething(); 
} 
+0

這也許是TGH指出的最好的方式。我可以忍受它,但我仍然被迫在函數調用中指定一個'null'?換句話說,我不能在調用中將它留空,因爲nullable不會爲被調用函數提供默認值。 – rwkiii 2014-10-19 04:49:38

+1

如果你想傳遞一個空參數而不是'null',那麼使用重載的方法。 即。 '公共函數SomeFunction(){SomeFunction(null); }' – grovesNL 2014-10-19 04:51:03

+0

明白了。謝謝。你和TGH都提供了同樣的答案。我希望我能把它們標記爲正確的......一方面TGH先回答。另一方面,他比你擁有更多的積分。 :我不喜歡因爲選擇艱難而將其標記爲答案。你提供了更多的輸入/跟進。所以謝謝。 – rwkiii 2014-10-19 04:55:14

1
public function SomeFunction(MyStruct? mystruct) { } 

可以使用空類型

+0

現在很明顯,你指出了!我沒有想到這一點。謝謝TGH。 – rwkiii 2014-10-19 04:45:56

相關問題