7

由于 resharper 5 现在有 DIY 模式,你编写了哪些模式来修复你见过的编码习惯?是否有在线 reshaper 模式存储库?我认为这里是为您最喜欢的模式投票的合乎逻辑的地方。

我认为这是在小的编程

4

4 回答 4

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$不为空时对相同的值);不过,我发现生成的代码更容易看。

使用 '??' 操作员

搜索模式:

if (!$nullable$.HasValue) $nullable$ = $value$;

替换模式:

$nullable$ = $nullable$ ?? $value$;

最后,我最喜欢的一个:

C# 不是 Java - 您可以使用“==”来比较字符串

搜索模式:

$str1$.Equals($str2$)

替换模式:

$str1$ == $str2
于 2012-04-23T16:47:28.393 回答
4

尽管我们希望有一个完整的在线 SSR 模式目录,但并不存在。这绝对是未来的待办事项清单。但是,在ReSharper 文档页面上,有一个指向基于 ReSharper 团队中使用的模式的示例模式目录的链接。

于 2010-11-01T22:10:54.060 回答
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$
}
于 2014-01-21T17:33:48.287 回答
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
于 2011-10-05T17:20:05.027 回答