c# - C#:带有大括号和匿名对象的`using`语句的目的
问题描述
我知道在 C#using
中使用大括号来确保对象的处理方式如下:
using (MyResource myRes = new MyResource())
{
myRes.DoSomething();
}
因此,这段代码是完全清楚的。
但我正在阅读一个代码,其中using
大括号与匿名实例化一起使用。这里有一些示例:
public partial class FrmAuthenticate : Form
{
public String Username { get; set; }
public String Password { get; set; }
private void btnOk_Click(object sender, EventArgs e)
{
NetworkCredential writeCredentials = new NetworkCredential(txtUsername.Text, txtPassword.Text);
using (new NetworkConnection(IpPath, writeCredentials))
{
Username = txtUsername.Text;
Password = txtPassword.Text;
}
}
}
或者
using (new NetworkConnection(TargetProgramSldDir, writeCredentials))
using (new NetworkConnection(@"\\"+ this.TargetServerIp, writeCredentials))
{
if (Directory.Exists(TargetProgramSldDir + @"\MyService"))
Copy(TargetProgramSldDir + @"\MyService", backupDir + @"\MyService");
}
这两种情况下如何使用匿名对象?NetworkConnection
两个代码中如何使用创建的对象?我不明白using
特别是第一个示例代码的陈述的目的是什么?
解决方案
两个代码中如何使用创建的 NetworkConnection 对象?
它只是放置在块的末尾。
我假设正在发生的事情是,如果凭据无效,构造函数将失败 - 所以在这种情况下,属性永远不会更新。如果构造函数成功,则更新属性,然后NetworkConnection
释放 。
代码的一个问题是异常没有被捕获——它会传播到事件循环中,希望它附加一个异常处理程序——但这真的不是很令人愉快。
如果这是我维护的代码库中的代码,我会尝试将其重构为:
if (NetworkConnection.TestCredentials(IpPath, writeCredentials))
{
Username = txtUsername.Text;
Password = txtPassword.Text;
}
else
{
// Report the error to the user
}
推荐阅读
- r - 使用数据框列表创建循环,对列表中的每个数据框进行更改
- php - 使用 shell_exec 将 Bash 参数传递给 PHP 文件
- javascript - 如果我们有多个 api 的调用,如何获得最后的承诺响应
- python-3.x - 在 Airflow 中使用 GET 请求从 REST API 中提取数据
- python - 给定一个整数列表,找到由除当前索引之外的所有元素的乘积组成的列表
- spring-boot - 是否可以将 Transactional 与 CompletableFuture 一起使用
- events - WSO2 丢弃事件
- django - 如何使 send_mail 函数发送密件抄送电子邮件 - Django REST API
- c# - 将 WPF 项目转换为 .NET 5 时出现“PreApplicationStartMethodAttribute”错误
- sql - 如何将列乘以从先前查询中获得的值?