我有一个常见问题,在使用时不遵守操作顺序?要么 ??运营商。在下面的代码中,程序员打算将价格设置为bigPrice + 5,如果为null,则将bigPrice默认为0。
var price = bigPrice ?? 0 + 5;
显然,操作的顺序是??运算符将整个表达式作为参数进行评估,但这是一个常见的错误。是否有可能通过resharper快速修复/结构查找和替换来缓解这种情况,基本上需要围绕你的问题括号?声明?我已经尝试过,但是无法获得识别多部分参数的宏(0 + 5)。
我想知道这是否可能/最好的方法是什么。
答案 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 ?? 0
而tagExpression2
评估为+ 5
。
替换表达式:(\1) \2;
:\1
代表第一个标记表达式,\2
代表第二个标记表达式。表达式导致(
)
被放置在第一个标记表达式后面,后跟一个空格,然后是第二个标记表达式。