void方法中的return语句

时间:2015-07-03 15:49:43

标签: c# return void

所以,我最近在C#中搜索使用一个小型的FTP库...我通过this问题到了this班......

我想知道他们所有虚空方法中return语句的意义......

这是他们的删除方法:

     /* Delete File */
public void delete(string deleteFile)
{
    try
    {
        /* Create an FTP Request */
        ftpRequest = (FtpWebRequest)WebRequest.Create(host + "/" + deleteFile);
        /* Log in to the FTP Server with the User Name and Password Provided */
        ftpRequest.Credentials = new NetworkCredential(user, pass);
        /* When in doubt, use these options */
        ftpRequest.UseBinary = true;
        ftpRequest.UsePassive = true;
        ftpRequest.KeepAlive = true;
        /* Specify the Type of FTP Request */
        ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
        /* Establish Return Communication with the FTP Server */
        ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
        /* Resource Cleanup */
        ftpResponse.Close();
        ftpRequest = null;
    }
    catch (Exception ex) { Console.WriteLine(ex.ToString()); }
    return;
}

我的问题是:

return;任何理由或效果吗?

6 个答案:

答案 0 :(得分:2)

从查看页面开始,每个方法都以模式结束

catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return /* Whatever the "default" return value would be on a error */;

在void方法中使用return作为最后一个语句对程序没有任何作用,我唯一的猜测是文章的海报喜欢遵循的模式。他有其他方法返回一个字符串......

catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return "";

所以他可能只想在返回void的方法上保持相同的模式。

答案 1 :(得分:1)

没有

这可以用于方法的早期返回,但这不是这种情况 - 方法结束时的return;完全是多余的。

只要您已禁用优化,生成的IL代码就会有明显的差异。没有return语句的void方法将只包含ret指令,而在末尾添加return;将添加分支指令 - 跳转到ret指令。

答案 2 :(得分:1)

不需要写无意义的解释,答案很简单:它没有任何意义

答案 3 :(得分:1)

它没有效果,但我也见过它。我推测(!)有些人喜欢用return结束他们的方法,在块的末尾有一个比闭括号更大的视觉指示。如果您在稍后阶段(从void到其他地方)更改返回类型,它也可能会为您节省一小段时间。

答案 4 :(得分:1)

您的代码存在一些问题

  1. 如果抛出异常,public static async Task<CreateProfileStruct> CreateProfile(string name, string phone, string email, string series, string location) { Profile profile = new Profile(name, phone, email, series, location); CreateProfileStruct result = new CreateProfileStruct(); string validation = profile.validate(); // profile information is acceptable... if (validation.Equals("")) { Console.WriteLine("creating profile"); try { await profile.SaveAsync(); } catch (ParseException e) { // set enum to error result.enumValue = CreateProfileEnum.Error; // determine the error message if (e.Code == ParseException.ErrorCode.ConnectionFailed) result.message = parseNoConnection; else result.message = profileCreationFailed; // return return result; } result.enumValue = CreateProfileEnum.Success; result.message = profileCreated; // change ParseUser["hasProfile"] to true ParseUser user = ParseUser.CurrentUser; user["hasProfile"] = true; user.SaveAsync(); return result; } // profile info is not acceptable else { result.enumValue = CreateProfileEnum.Error; result.message = validation; return result; } } public enum CreateProfileEnum { Success, Error } public struct CreateProfileStruct { public CreateProfileEnum enumValue; public string message; } t将不会关闭(资源泄漏)
  2. 您真的想重新创建类字段(ftpReques)吗?
  3. 捕获ftpRequest气味
  4. 最后Exception无用(您的问题)
  5. 重新编写的代码可能是这样的:

    return

答案 5 :(得分:0)

return方法末尾的void语句不会产生任何其他影响。可以在不改变方法语义的情况下删除它。

可以使用此return来简化对函数返回的位置的文本搜索,但它对编译器没有影响。