2015-11-19 67 views
-2

下面的代碼示例將拋出「不是所有的路徑都返回一個值」爲什麼用包含return語句的方法替換return語句是不可能的?

public static Validation Validate() 
    { 
     Validation invalid = new Validation() 
     InvalidResult(invalid); // why removing the return keyword is not possible?? 
    } 

    public static Validation InvalidResult(Validation invalid) 
    { 
     return invalid; // the return comes from here 
    } 
+1

「驗證」方法必須返回一個驗證對象。它就在簽名中。所以你需要「返回」一些東西。 IIRC,(至少某些版本的)VB會讓你隱式返回最後一個值。 –

+1

您必須返回方法的結果。 '返回InvalidResult(無效);'否則如何知道要返回哪個值。 – Magnus

+1

總之,*不具有返回類型'void'的任何方法必須具有'return'語句。每個代碼路徑必須有一個。這正是C#的工作方式。 –

回答

6

因爲C#語言不會隱式使用最後一個返回值作爲return語句,則必須顯式地說明。

public static Validation Validate() 
{ 
    Validation invalid = new Validation() 
    return InvalidResult(invalid); 
} 

唯一的地方,C#語言允許隱含回報是在Expression Lambda

Func<Validation, Validation> example = (invalid) => InvalidResult(invalid); 
+0

對於投票的人,請讓我知道是什麼原因讓你認爲我的答案「沒有用」,所以我可以糾正它。 –

5

簡而言之; Validate不會返回任何內容,如果您刪除return語句。

InvalidResult返回時,您又回到了Validate函數中。怎麼辦? Validate仍然需要return的東西。

答案是:你需要從InvalidResult函數返回結果:

public static Validation Validate() 
{ 
    Validation invalid = new Validation() 
    return InvalidResult(invalid); 
} 
1

當你用return語句,函數被調用,程序返回到該點的控制,你叫函數,並且您將返回一個Validation類型的對象。我希望這會有所幫助。