在开始之前,请注意我是Resharper的新手并且可能会忽视某些事情。
我正在尝试使用Resharper自动化我的一些锅炉板代码。特别是我想自动将DI构造函数参数复制到私有字段。我大部分时间都遵循微软Razor Pages示例中的模式。
public class CreateModel : PageModel
{
private readonly AppDbContext _db;
public CreateModel(AppDbContext db)
{
_db = db;
}
}
Resharper这样做,到目前为止都很好。但是我也希望像这样生成一个无效传播。
public class CreateModel : PageModel
{
private readonly AppDbContext _db;
public CreateModel(AppDbContext db)
{
_db = db ?? throw new ArgumentNullException(nameof(db));
}
}
我已经尝试过查看Resharper的Null Checking选项,模板资源管理器以及我能找到的所有其他选项。但我似乎无法找到任何方法来修改行为或创建自己的行为。代码片段看起来正确,除了它们在光标上生成。包裹片段似乎也不正确。
所以我的问题是,如何在Resharper(或普通的旧Visual Studio)中创建此行为?
答案 0 :(得分:0)
好吧,这就像我能得到的一样近。我无法在一个热键中实现这一点,但两个足够接近。
让我们在没有我们的字段或空检查的情况下开始。
public class CreateModel : PageModel
{
public CreateModel(AppDbContext db)
{
}
}
在db
上使用 ctrl +。会生成一个选项,可以生成一个只读字段来存储该值。按Enter键接受它。 Resharper / VS现在会给你这个。
public class CreateModel : PageModel
{
private readonly AppDbContext _db;
public CreateModel(AppDbContext db)
{
_db = db;
}
}
然后在db
上再次使用 ctrl +。。你的光标应该还在那里。它将提供生成空检查。我以为会使用if
语句,错了! Resharper将编辑赋值并将一个null传播运算符添加到throw中。你最终会这样做。
public class CreateModel : PageModel
{
private readonly AppDbContext _db;
public CreateModel(AppDbContext db)
{
_db = db ?? throw new ArgumentNullException(nameof(db));
}
}
这正是我们想要的。