这是处理和使用
的正确方法吗?public partial class Form1 : Form
{
winappContext _context;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
using (_context = new winappContext())
{
_context = new winappContext();
var query = from c in _context.Customers
orderby c.CustomerName
select c;
this.customerBindingSource.DataSource = query.ToList();
}
....
或者我需要调用_context.Dispose()onFormClosing
由于
答案 0 :(得分:12)
都不是。假设你不需要 _context
成为一个字段(没有迹象表明你这样做),你应该把它变成一个局部变量:
private void Form1_Load(object sender, EventArgs e)
{
using (winappContext _context = new winappContext())
{
var query = from c in _context.Customers
orderby c.CustomerName
select c;
this.customerBindingSource.DataSource = query.ToList();
}
}
一般来说,拥有实现IDisposable
的字段会很痛苦 - 如果你能够以相同的方法处理资源,它会更加清晰。
另请注意,您的原始代码会创建两个上下文:
using (_context = new winappContext())
{
_context = new winappContext();
...
}
这意味着第一个被自动处理,但第二个没有。如果您尝试在using
语句中执行此操作,其中声明该变量作为语句介绍部分的一部分,则该变量是只读的,因此您不能犯这个错误
(您还应该重命名winappContext
类以遵循.NET命名约定。)
答案 1 :(得分:0)
“使用”标记(}中的一次性对象在{}结束后处理。所以不行。不要处理,它为你完成。
答案 2 :(得分:0)
您无需调用dispose对象。
Using语句自动释放资源,避免调用Dispose方法。
答案 3 :(得分:0)
您给出的两个例子是等效的。编译器消失,并使用finally括号中调用的Dispose()命令将您的using命令转换为try ...。