C#:带有大括号和匿名对象的`using`语句的目的
C#: Purpose of `using` statement with braces and anonymous object
我知道在 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
语句的目的是什么?
How is the created object of NetworkConnection used in the two codes?
它只是在块的末尾处理。
我假设发生的情况是,如果凭据无效,构造函数将失败 - 因此在这种情况下,属性永远不会更新。如果构造函数成功,则更新属性,然后释放 NetworkConnection
。
目前代码的一个问题是未捕获异常 - 它会传播到事件循环中,希望它附加了一个异常处理程序 - 但它真的不是很令人愉快。
如果这是我正在维护的代码库中的代码,我会尝试将其重构为:
if (NetworkConnection.TestCredentials(IpPath, writeCredentials))
{
Username = txtUsername.Text;
Password = txtPassword.Text;
}
else
{
// Report the error to the user
}
我知道在 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
语句的目的是什么?
How is the created object of NetworkConnection used in the two codes?
它只是在块的末尾处理。
我假设发生的情况是,如果凭据无效,构造函数将失败 - 因此在这种情况下,属性永远不会更新。如果构造函数成功,则更新属性,然后释放 NetworkConnection
。
目前代码的一个问题是未捕获异常 - 它会传播到事件循环中,希望它附加了一个异常处理程序 - 但它真的不是很令人愉快。
如果这是我正在维护的代码库中的代码,我会尝试将其重构为:
if (NetworkConnection.TestCredentials(IpPath, writeCredentials))
{
Username = txtUsername.Text;
Password = txtPassword.Text;
}
else
{
// Report the error to the user
}