【发布时间】:2020-06-19 13:37:32
【问题描述】:
什么是最好的使用方式?
代码1:
public async Task<IActionResult> EditEmployeePicture(string userId)
{
using IClubRep current = new ClubRep(_db);
var data = await current.CurrentUserData(user.Id);
}
代码2:
public async Task<IActionResult> EditEmployeePicture(string userId)
{
using (IClubRep current = new ClubRep(_db))
{
var data = await current.CurrentUserData(user.Id);
}
}
代码3:
private IClubRep Club { get; set; }
.
.
.
public async Task<IActionResult> EditEmployeePicture(string userId)
{
Club = new ClubRep(_db);
var data = await Club.CurrentUserData(user.Id);
}
您认为使用 using 的最佳方式是什么? 对系统的压力最小。
【问题讨论】:
-
code1和code2编译为完全相同的 IL。使用对您和您的团队更有利的任何东西。code3无法处理ClubRep并且不应使用(假设IClubRep确实是IDisposable,否则code1和code2将无法编译)。在每次调用EditEmployeePicture时,都会泄露一个新实例。即使它以某种方式被重复使用,也不清楚应该由谁处理。一般来说,您希望一次性对象的范围尽可能小。 -
代码 1 和代码 2 相同。代码 3 不调用
Dispose()。 -
使用代码 2,您可以控制何时处理对象。首选 imo。
-
@spender:您假设的示例不正确,并且没有演示问题中的场景。
usingdeclarations (introduced in C# 8) 与单行using表达式不同。使用using声明引入的值将被放置在变量作用域的末尾,在这种情况下是方法的末尾(即与code2相同)。 -
@TaW:OTOH 代码在早期版本的 C# 中无法合法编译,因为不支持该语法,因此假设这不是一个很大的飞跃。 :-P
标签: c# asp.net-core using