return void 方法中的语句
return statement in void methods
所以,我最近正在寻找在 C# 中使用 FTP 的小型库...我通过了 this question to this class...
我想知道他们所有 void 方法中 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;
有什么原因或影响吗?
没有
这可以用于方法的早期 returns,但这里不是这种情况 - 方法末尾的 return;
完全多余。
不过,生成的 IL 代码中存在明显的差异,只要您禁用了优化。没有 return
语句的 void 方法将只包含一条 ret
指令,而在末尾添加 return;
将添加一条分支指令 - 跳转到 ret
指令。
不用写无意义的解释,答案很简单:没有任何意义
void
方法末尾的 return
语句没有提供额外的效果。可以在不改变方法语义的情况下将其删除。
可以使用此 return
来简化文本搜索函数 returns 的位置,但它对编译器没有影响。
从查看页面来看,每个方法都以模式结尾
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return /* Whatever the "default" return value would be on a error */;
将 return
作为 void 方法中的最后一条语句不会对程序做任何事情,我唯一的猜测是文章的张贴者喜欢遵循这种模式。他在其他返回字符串的方法中使用了它...
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return "";
所以他可能只是想在返回 void 的方法上保持相同的模式。
没有效果,但我也看到了。我推测 (!) 有些人喜欢用 return
结束他们的方法,以便在块的末尾有比右括号更大的视觉指示。如果您在稍后阶段更改 return 类型(从 void 到其他类型),它也可能会为您节省一瞬间。
您的代码存在一些问题:
- 如果抛出异常,
ftpReques
t不会关闭(资源泄漏)
- 您真的要重新创建 class 字段 (
ftpRequest
) 吗?
- 捕捉
Exception
气味
- 最后一个
return
没用(你的问题)
修改后的代码可能是这样的:
public void delete(string deleteFile) {
try {
// using over IDisposable is
using (var ftpRequest = (FtpWebRequest)WebRequest.Create(host + "/" + deleteFile)) {
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();
}
}
catch (WebException ex) {
Console.WriteLine(ex.ToString());
}
}
所以,我最近正在寻找在 C# 中使用 FTP 的小型库...我通过了 this question to this class...
我想知道他们所有 void 方法中 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;
有什么原因或影响吗?
没有
这可以用于方法的早期 returns,但这里不是这种情况 - 方法末尾的 return;
完全多余。
不过,生成的 IL 代码中存在明显的差异,只要您禁用了优化。没有 return
语句的 void 方法将只包含一条 ret
指令,而在末尾添加 return;
将添加一条分支指令 - 跳转到 ret
指令。
不用写无意义的解释,答案很简单:没有任何意义
void
方法末尾的 return
语句没有提供额外的效果。可以在不改变方法语义的情况下将其删除。
可以使用此 return
来简化文本搜索函数 returns 的位置,但它对编译器没有影响。
从查看页面来看,每个方法都以模式结尾
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return /* Whatever the "default" return value would be on a error */;
将 return
作为 void 方法中的最后一条语句不会对程序做任何事情,我唯一的猜测是文章的张贴者喜欢遵循这种模式。他在其他返回字符串的方法中使用了它...
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
return "";
所以他可能只是想在返回 void 的方法上保持相同的模式。
没有效果,但我也看到了。我推测 (!) 有些人喜欢用 return
结束他们的方法,以便在块的末尾有比右括号更大的视觉指示。如果您在稍后阶段更改 return 类型(从 void 到其他类型),它也可能会为您节省一瞬间。
您的代码存在一些问题:
- 如果抛出异常,
ftpReques
t不会关闭(资源泄漏) - 您真的要重新创建 class 字段 (
ftpRequest
) 吗? - 捕捉
Exception
气味 - 最后一个
return
没用(你的问题)
修改后的代码可能是这样的:
public void delete(string deleteFile) {
try {
// using over IDisposable is
using (var ftpRequest = (FtpWebRequest)WebRequest.Create(host + "/" + deleteFile)) {
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();
}
}
catch (WebException ex) {
Console.WriteLine(ex.ToString());
}
}