Resharper Quickfix for ??操作顺序

时间:2011-03-16 04:02:54

标签: c# resharper

我有一个常见问题,在使用时不遵守操作顺序?要么 ??运营商。在下面的代码中,程序员打算将价格设置为bigPrice + 5,如果为null,则将bigPrice默认为0。

var price = bigPrice ?? 0 + 5;

显然,操作的顺序是??运算符将整个表达式作为参数进行评估,但这是一个常见的错误。是否有可能通过resharper快速修复/结构查找和替换来缓解这种情况,基本上需要围绕你的问题括号?声明?我已经尝试过,但是无法获得识别多部分参数的宏(0 + 5)。

我想知道这是否可能/最好的方法是什么。

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式在Visual Studio中执行find and replace

在查找 - 替换对话框(Ctrl + H)中,输入以下内容,

找到:{:i:b??:b:z:b}{[+-/*]:b:z};
替换为:(\1) \2;
查看:Current project

初始代码,

var price = bigPrice ?? 0 + 5;

更换后,

var price = (bigPrice ?? 0 ) + 5;


快速解释查找和替换表达式,

  • 查找表达式:{:i:b??:b:z:b}{[+-/*]:b:z};{xxx}表示已标记的表达式,即它是找到的表达式的分组。 :z代表整数,:b代表空格,:i代表标识符。 [xxx]代表集合中的任何字符。 \用于转义特殊字符。因此,在您的情况下,tagExpression1评估为bigPrice ?? 0tagExpression2评估为+ 5

  • 替换表达式:(\1) \2;\1代表第一个标记表达式,\2代表第二个标记表达式。表达式导致( )被放置在第一个标记表达式后面,后跟一个空格,然后是第二个标记表达式。

Visual studio find and replace