我知道在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
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句