【问题标题】:What resharper 5 patterns do you use? [closed]您使用什么 resharper 5 模式? [关闭]
【发布时间】:2011-05-03 15:49:13
【问题描述】:

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

我认为这是programming in the small

【问题讨论】:

  • Resharper 模式存储库会摇滚!
  • 很惊讶这里没有更多的答案。很想看看其他人如何利用此功能。

标签: c# idioms resharper-5.0


【解决方案1】:

我目前正在对遗留应用程序进行深度重构。以下是我用来修复一些代码问题的一些 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

【讨论】:

    【解决方案2】:

    虽然我们希望有一个完整的在线 SSR 模式目录,但不存在。这绝对是未来的待办事项清单。 但是,在 ReSharper documentation page 上,有一个指向 sample Pattern Catalog 的链接,该链接基于 ReSharper 团队中使用的模式。

    【讨论】:

      【解决方案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$
      }
      

      【讨论】:

        【解决方案4】:

        今天早上才发现这甚至存在。我做的第一件事是尝试确保 null 或常量始终位于相等检查的左侧,以防止无意中将对象设置为 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-02-22
          • 1970-01-01
          • 2011-04-05
          • 1970-01-01
          • 1970-01-01
          • 2010-09-20
          • 2010-09-06
          • 2011-05-22
          • 1970-01-01
          相关资源
          最近更新 更多