JetBrains Rider 2025.2 Help

后缀模板

后缀模板帮助您转换已经输入的表达式,而无需向后跳转——只需在表达式后输入一个点,然后从 自动完成列表 中选择一个模板。

应用后缀模板

后缀模板最简单的示例之一是对布尔表达式取反。 假设您刚刚输入了一个布尔表达式,然后意识到比较逻辑需要反转。 通常,您需要将光标移回并将 == 更改为 != 或反之,然后返回到原来的位置。 使用 JetBrains Rider,您只需继续输入 .非 并按下 输入

还有 更多的后缀模板可供使用,以加快编码速度。 例如,您可以用 ifwhile锁定示意图 包裹当前表达式,在当前表达式前添加 返回yield returnawait ,遍历集合,生成 switch 语句,将表达式转换为特定类型,甚至为表达式引入字段或属性。

后缀模板甚至可以改变您的输入习惯。 请考虑下面的 CheckInput 方法,并想象您将如何输入空值检查子句。

private void CheckInput(string input) { if (input == null) { throw new ArgumentNullException("The input is null"); } // do something with 'input' }

现在让我们看看如何使用后缀模板完成此操作。

当您的光标位于方法体中时,您可以立即开始输入 输入 ,因为这是您想要检查的内容。 当 输入 出现时,只需继续输入 .null——一个用于检查 null 的后缀模板:

应用用于空值检查的后缀模板

这将把 输入null 进行比较,并将比较包裹在 if 语句中,同时将光标放置在可以继续输入的位置:

应用用于空值检查的后缀模板

现在,您可以直接输入异常类名称,而不是输入 throw ,并在其后调用 .throw 模板:

应用用于空值检查的后缀模板

应用此模板后,您将获得完整的 throw 语句,并将光标放置在可以输入参数的位置:

应用用于空值检查的后缀模板

您可以看到,与手动输入常用的语言结构相比,在许多情况下,您只需输入模板快捷方式的几个初始字符,就可以将所有内容正确格式化并放置到位,无需拼写错误。

应用后缀模板

  1. 在当前表达式后输入一个点,并在自动完成列表中检查所需的模板。

  2. 如果您知道要应用的模板的快捷方式,请开始输入它——这将缩小建议列表的范围。

  3. 一旦在建议列表中选择了所需的模板,按下 输入

  4. 如果模板具有 可编辑参数 (即需要用户输入),JetBrains Rider 会在编辑器中部署一个 热区会话 ,并将输入位置设置为第一个参数。 然后,您可以执行以下操作:

    • 如果 JetBrains Rider 为当前参数建议了一些值,请使用 箭头键浏览建议值列表,或者直接键入所需的值。

    • 标签页 输入 接受值并移动到下一个参数的输入位置。 如果这是最后一个参数,会话热点将完成,插入点将移动到为会话定义的结束位置。

    • Shift+Tab 键 将输入焦点移动到上一个参数的输入位置。

    • Esc 退出热区会话。 在这种情况下,所有会话参数将使用默认值初始化。

后缀模板列表

快捷方式

描述

示例

.arg

用调用包裹表达式

方法(expr)

.await

等待 'Task' 类型的表达式

等待 expr

用 UE 类型转换包裹表达式

用类型转换包裹表达式

((SomeType) expr)

.else

检查布尔表达式是否为 'false'

if (!expr)

.field

为表达式引入字段

_field = expr;

.for

使用索引遍历集合

for (var i = 0;i < xs.Length;i++)

.foreach

遍历可枚举集合

foreach (var x in expr)

.forr

使用索引反向遍历集合

for (var i = xs.Length-1;i >= 0;i--)

.if

检查布尔表达式是否为 'true'

if (expr)

.inject

引入特定类型的主构造函数参数

类 Component(IDependency dependency)

.lock

用锁块包裹表达式

lock (expr)

.new

生成类型的实例化表达式

new SomeType()

.not

对布尔表达式取反

!expr

检查表达式是否非空

检查表达式是否非空

if (expr != null)

检查表达式是否为空

检查表达式是否为空

if (expr == null)

用括号包裹当前表达式

用括号包裹当前表达式

(expr)

解析字符串为某种类型的值

解析字符串为某种类型的值

int.Parse(expr)

为表达式引入属性

为表达式引入属性

Property = expr;

.return

从当前函数返回表达式

return expr;

选择编辑器中的表达式

选择编辑器中的表达式

|已选 + 表达式|

.switch

生成 switch 语句

switch (expr)

抛出 'Exception' 类型的表达式

抛出 'Exception' 类型的表达式

throw expr;

将当前表达式赋值给某个变量

将当前表达式赋值给某个变量

lvalue = expr;

尝试解析字符串为某种类型的值

解析字符串为某种类型的值

int.TryParse(expr, out value)

用 typeof() 表达式包裹类型使用

用 typeof() 表达式包裹类型使用

typeof(TExpr)

用 using 语句包裹资源

用 using 语句包裹资源

using (expr)

为表达式引入变量

为表达式引入变量

var x = expr;

当布尔语句为 'true' 时进行迭代

当布尔语句为 'true' 时进行迭代

while (expr)

从迭代器方法中返回值

从迭代器方法中返回值

yield return expr;

快捷键

描述

示例

生成范围的迭代器

从范围生成迭代器

sort(range.begin(), range.end())

用 UE 类型转换包裹表达式

用 UE cast 环绕表达式

Cast<SomeType>(expr)

.cbeg..cend

生成范围的迭代器

is_sorted(range.cbegin(), range.cend())

.co_await

将表达式作为参数传递给 co_await

co_await expr

从当前协程返回表达式

从当前协程返回表达式

co_return expr;

.co_yield

将表达式作为参数传递给 co_yield

co_yield expr

用 const_cast 包裹表达式

用 const_cast 包裹表达式

const_cast<SomeType &>(expr)

用 do 包裹表达式

迭代直到布尔表达式为 'false'

do { } while (expr);

用 dynamic_cast 包裹表达式

用 dynamic_cast 包裹表达式

dynamic_cast<SomeType &>(expr)

.else

检查布尔表达式是否为 'false'

if (!expr)

遍历集合

遍历范围

for (auto && x : range)

.forward

转发函数参数

std::forward<Arg>(arg)

.if

检查布尔表达式是否为 'true'

if (expr)

.make_shared

构造一个对象并将其包装在 std::shared_ptr 中

std::make_shared<SomeType>()

.make_unique

构造一个对象并将其包装在 std::unique_ptr 中

std::make_unique<SomeType>()

.new

生成类型的实例化表达式

new SomeType()

.reinterpret_cast

用 reinterpret_cast 环绕表达式

reinterpret_cast<SomeType &>(expr)

.return

从当前函数返回表达式

return expr;

.safe_cast

用 safe_cast 包裹表达式(C++/CLI)

safe_cast<SomeType>(expr)

.static_cast

用 static_cast 环绕表达式

static_cast<SomeType>(expr)

.switch

生成针对整型/枚举类型的 switch

switch (expr)

为表达式引入变量

为表达式引入变量

auto x = expr;

当布尔语句为 'true' 时进行迭代

当布尔表达式为 'true' 时进行迭代

while (expr)

最后修改日期: 2025年 9月 26日