2015-11-19 66 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类型的对象。我希望这会有所帮助。