2016-07-19 23 views
1

在編寫代碼時,我有時會發現,如果需要,返回成功的bool值和代碼的out參數非常有用。甚至可以使用TryParse函數及其各自的輸出參數。在方法調用中內聯out參數

最近的一個例子是下面的方法簽名:

private State GetTheStateOfClass1(Class1 o, out double confidence) 

這裏我有一個查找Class1對象的狀態和其相應的信心,對象確實有狀態的方法。

創造Class2像這樣一個新的實例時,此方法用於:

double confidence; 
Class2 c2 = new Class2(GetTheStateOfClass1(o, out confidence), confidence, ...); 

有沒有一種方法,我可以使用內聯的輸出參數,像這樣:

Class2 c2 = new Class2(GetTheStateOfClass1(o, out double confidence), confidence, ...); 
+1

我建議'Tuple '或'StateWithConfidence'。 'out'參數已經是meh,但是當你將它們包含在表達式中時,它們都被設置和使用,這是雙重的meh。 '新的Class2(o.GetStateWithConfidence())'(這可以是一個擴展方法,如果需要的話),或者只是'新的Class2(o)',讓'Class2'自己弄清楚事情的可讀性。當然是主觀的。 –

+0

在C#7中,[這應該成爲可能,完全按照您提出的語法](https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0 /)。最終的例子是否最終要編譯(在聲明的同一個語句中使用內聯參數)仍然是一個懸而未決的問題。 –

+0

@JeroenMostert哦真棒是確認了嗎?如果它確認了,你可以將它作爲答案張貼嗎? – TheLethalCoder

回答

1

我的理解, 這是不可能的; out參數必須是調用者範圍內的實際變量。這就是說,解決方法是創建一個不使用out參數的重載,如下所示。

private State GetTheStateOfClass1(Class1 o) 
{ 
    double confidence; 
    return GetTheStateOfClass1(Class1 o, out confidence); 
} 
相關問題