使用实体框架时,将数据函数包装在using语句中是一种标准做法。 e.g。
using(var db = new MyAppContext())
{
return db.Books.ToList();
}
通常里面只有一个return语句。有没有办法做到这一点,而不必每次都写入using语句。使用新的c#功能,该功能将更容易编写。
public IList<Book> GetAllBooks() => db.Books.ToList()
我有很多方法可以使用这样的块,如果没有它可以做到这一点,它将使代码更简单。
提前谢谢。
答案 0 :(得分:0)
我不能说我完全赞同你想要的东西,但是,代码如下:
public static class Extensions
{
public static TOut DisposeWrapper<TDisposable, TOut>(this TDisposable input, Func<TDisposable,TOut> function) where TDisposable:IDisposable
{
try
{
return function(input);
}
finally
{
input.Dispose();
}
}
}
或者,您可以使用包装,它具有完全相同的效果,可能更简洁:
public static class Extensions
{
public static TOut DisposeWrapper<TDisposable, TOut>(this TDisposable input, Func<TDisposable,TOut> function) where TDisposable:IDisposable
{
using (input) return function(input);
}
}
会让你做一些类似于你想要的事情。使用起来略显冗长,例如:
public static int ExampleUsage() => new Example().DisposeWrapper(x => x.SomeMethod());
为了完整起见,这是我用来测试此功能的示例类:
public class Example : IDisposable
{
public void Dispose()
{
Console.WriteLine("I was disposed of");
}
public int SomeMethod() => 1;
}