由于resharper 5现在有DIY模式,你有什么模式可以修复你见过的编码习语?是否有在线resharper模式存储库?我认为这将是一个合理的地方投票给你最喜欢的模式。
我认为这是programming in the small。
答案 0 :(得分:5)
我目前正在遗留应用程序中进行深度重构。以下是一些ReSharper(6.1)模式,我用它来解决一些代码问题:
搜索模式:
$type$ $var$ = $expr$;
$stmt$
$var$.Dispose();
$var$ = null;
替换模式:
using (var $var$ = $expr$)
{
$stmt$
}
搜索模式:
$type$ $var$ = $expr$;
$stmt$
$var$.Dispose();
$var$ = null;
return $something$;
替换模式:
using (var $var$ = $expr$)
{
$stmt$
return $something$;
}
Resharper无法识别以下使用??
运算符的机会,因此我为它创建了一个模式。当然,它使条件赋值成为一个简单的赋值(当$nullable$
不为null时为相同的值);仍然,我发现结果代码更容易看到。
搜索模式:
if (!$nullable$.HasValue) $nullable$ = $value$;
替换模式:
$nullable$ = $nullable$ ?? $value$;
最后,我最喜欢的一个:
搜索模式:
$str1$.Equals($str2$)
替换模式:
$str1$ == $str2
答案 1 :(得分:4)
虽然我们希望有一个完整的在线SSR模式目录。这绝对是未来的待办事项列表。 但是,在ReSharper documentation page上,根据ReSharper团队中使用的模式,指向sample Pattern Catalog的链接。
答案 2 :(得分:3)
使用IDictionary<TKey,TItem>.TryGetValue
代替按键两次
$dict$
是IDictionary<,>
$key$
只是一个参数$moreCode$
是任意数量的陈述$valType$
是一种类型$varName$
是标识符搜索模式:
if ($dict$.ContainsKey($key$)) {
$valType$ $varName$ = $dict$[$key$];
$moreCode$
}
替换模式:
$valType$ $varName$;
if ($dict$.TryGetValue($key$, out $varName$)) {
$moreCode$
}
答案 3 :(得分:2)
刚刚发现今天早上甚至存在。我做的第一件事是尝试确保null或常量总是在等式检查的左侧,以防止无意中将对象设置为null。
我还没有想出常量,但是空检查是:
Search pattern: if($expr$ == null) $stmt$
Replace Pattern: if(null == $expr$) $stmt$
Placeholders:
expr: expression of type System.Object (or derived type)
stmt: minimum of one statement, no maximum
然后我复制了那个模式并制作了一个简单的Find-only模式:
Search pattern: if($expr$ = null) $stmt$
Placeholders:
expr: expression of type System.Object (or derived type)
stmt: minimum of one statement, no maximum
这个实际上会找到你在if语句中设置为null的任何实例,无论你是否有意。
我真的很想失去几天写模式。不过,我的软件会更好。
编辑:这是另一个在我的代码库中激怒我的人。由于Directory.CreateDirectory在内部检查目录是否存在,因此事先对Directory.Exists进行冗余调用没有任何意义。
Search pattern:
if (!Directory.Exists($path$))
{
Directory.CreateDirectory($path$);
}
Replace Pattern:
Directory.CreateDirectory($path$);
Placeholders:
path: identifier