如何避免在我的所有控制器中重复使用10+指令?
每个控制器中还有大约10多个使用指令,因为它们引用了我们公司使用的核心框架功能。我知道你会说逻辑应该分开,所以我不再需要它们了,但这不是一个选择。
所以要明确,我在谈论这个:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Mvc;
using AutoMapper.QueryableExtensions;
using Kendo.Mvc.UI;
答案 0 :(得分:2)
using语句确保即使在对象上调用方法时发生异常,也会调用Dispose。 您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果;实际上,这就是编译器如何翻译using语句。
using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}
由编译器翻译
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
因此,在您的情况下,您可以在单个块中添加添加对象初始化并将所有内容置于finally块中,请参阅下面的示例,
{
Font font1 = new Font("Arial", 10.0f);
Font font2 = new Font("Arial", 10.0f);
Font font3 = new Font("Arial", 10.0f);
Font font4 = new Font("Arial", 10.0f);
Font font5 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
((IDisposable)font1).Dispose();
((IDisposable)font2).Dispose();
((IDisposable)font3).Dispose();
((IDisposable)font4).Dispose();
((IDisposable)font5).Dispose();
}
}