为什么用包含返回语句的方法替换返回语句是不可能的

本文关键字:返回 语句 不可能 替换 方法 为什么 包含 | 更新日期: 2023-09-27 18:23:43

下面的代码示例将抛出"并非所有路径都返回值"

   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
    }

为什么用包含返回语句的方法替换返回语句是不可能的

因为C#语言不会隐式使用返回的最后一个值作为返回语句,所以您必须明确它。

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

C#语言唯一允许隐式返回的地方是在Expression Lambda中。

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

简单地说;如果删除return语句,Validate不会返回任何内容。

InvalidResult返回时,您回到了Validate函数内部。现在怎么办?Validate仍然需要return一些东西。

答案:您需要返回InvalidResult函数的结果:

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

当您在调用return语句的函数中时,程序的控制将返回到您调用该函数的位置,并且您需要返回Validation类型的对象。我希望这能有所帮助。