你使用什么resharper 5模式?

时间:2010-11-01 21:27:53

标签: c# idioms resharper-5.0

由于resharper 5现在有DIY模式,你有什么模式可以修复你见过的编码习语?是否有在线resharper模式存储库?我认为这将是一个合理的地方投票给你最喜欢的模式。

我认为这是programming in the small

4 个答案:

答案 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$;

最后,我最喜欢的一个:

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

搜索模式:

$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