由于 resharper 5 现在有 DIY 模式,你编写了哪些模式来修复你见过的编码习惯?是否有在线 reshaper 模式存储库?我认为这里是为您最喜欢的模式投票的合乎逻辑的地方。
我认为这是在小的编程。
由于 resharper 5 现在有 DIY 模式,你编写了哪些模式来修复你见过的编码习惯?是否有在线 reshaper 模式存储库?我认为这里是为您最喜欢的模式投票的合乎逻辑的地方。
我认为这是在小的编程。
我目前正在对遗留应用程序进行深度重构。以下是我用来修复一些代码问题的一些 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$
不为空时对相同的值);不过,我发现生成的代码更容易看。
搜索模式:
if (!$nullable$.HasValue) $nullable$ = $value$;
替换模式:
$nullable$ = $nullable$ ?? $value$;
最后,我最喜欢的一个:
搜索模式:
$str1$.Equals($str2$)
替换模式:
$str1$ == $str2
尽管我们希望有一个完整的在线 SSR 模式目录,但并不存在。这绝对是未来的待办事项清单。但是,在ReSharper 文档页面上,有一个指向基于 ReSharper 团队中使用的模式的示例模式目录的链接。
使用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$
}
今天早上才发现这甚至存在。我做的第一件事是尝试确保 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