1

我需要不断编写的最繁琐的语法是在字典中懒惰地初始化一个容器,例如:

ContainerRecord value;
if(!_dictionary.TryGetValue(key,out value))
{
   value = new ContainerRecord();
   _dictionary[key] = value;
}
//Container is always initialized here

我觉得这将是一个微不足道的重构模式:(至少对于显式变量声明和 if 语句部分)

var value = _dictionary[key];

我知道在较新版本的 C# 中有一些新的语法糖可以消除预先声明变量的需要。不幸的是,我无法在我的环境中使用这些功能,并且在可预见的未来也不会。

似乎确实有一个“检查包含键”重构,它实现了几乎相同的结果,但缺点是两次查找。

这可以通过一些扩展来实现吗?我认为这是一个足够普遍的情况,它已经在某个地方解决了。

4

1 回答 1

1

您可以为此创建自定义模式。

  1. 打开ReSharper | 选项……
  2. 转到代码检查 | 自定义模式节点。
  3. 单击添加模式按钮。
  4. 选择对话框右上角的替换。
  5. 使用添加占位符按钮添加以下四个占位符:

    Type: Identifier Placeholder
    Name: value
    
    Type: Expression Placeholder
    Name: key
    
    Type: Type Placeholder
    Name: type
    
    Type: Expression Placeholder
    Name: dict
    Expression Type: System.Collections.Generic.IDictionary<,>
    
  6. 在顶部的文本区域中输入以下内容作为搜索模式:

    $type$ $value$ = $dict$[$key$];
    
  7. 在底部的文本区域中输入以下内容作为替换模式:

    $type$ $value$;
    if(!$dict$.TryGetValue($key$, out $value$))
    {
        $value$ = new $type$();
        $dict$[$key$] = $value$;
    }
    
  8. 可选:填写顶部的描述。我用过Replace with TryGetValue

  9. 可选:填写底部的描述。我用的一样。
  10. 可选:选中替换后的格式复选框。

完成的对话框应如下所示:

搜索模式对话框

  1. 点击Save按钮。
  2. 回到 中Custom Patterns,您可以使用下拉菜单在右侧设置新模式的严重性级别。我选择了建议
  3. 单击保存按钮退出选项。

如果您正确设置了所有内容,ReSharper 应该使用建议的修复标记匹配模式:

悬停建议

快速修复菜单中的建议

于 2018-11-26T00:35:09.820 回答