字典中 TryGetValue 的 Resharper 重构模式
Resharper Refactor pattern for TryGetValue in Dictionary
我需要不断编写的最繁琐的语法是懒惰地初始化字典中的容器,例如:
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# 中有一些新的语法糖,可以消除预先声明变量的需要。不幸的是,我无法在我的环境中访问这些功能,并且在可预见的未来也不会。
似乎确实有一个 "check for contains key" 重构,它实现了几乎相同的结果,但缺点是执行了两次查找。
这可以通过一些扩展实现吗?我认为这是一个足够常见的案例,它已经在某个地方得到解决了。
您可以为此创建自定义模式。
- 打开 ReSharper |选项....
- 转到代码检查 |自定义模式 节点。
- 单击添加图案 按钮。
- Select替换对话框右上角
使用 添加占位符 按钮添加以下四个占位符:
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<,>
在顶部的文本区域中输入以下内容作为搜索模式:
$type$ $value$ = $dict$[$key$];
在底部的文本区域中输入以下内容作为替换模式:
$type$ $value$;
if(!$dict$.TryGetValue($key$, out $value$))
{
$value$ = new $type$();
$dict$[$key$] = $value$;
}
可选:填写顶部的描述。我用了Replace with TryGetValue
.
- 可选:填写底部的描述。我用的一样。
- 可选:选中替换后格式复选框。
完成的对话框应该如下所示:
- 单击
Save
按钮。
- 回到
Custom Patterns
,您可以使用下拉菜单在右侧设置新模式的严重性级别。我选择了建议。
- 单击 保存 按钮退出选项。
如果您正确设置了所有内容,ReSharper 应使用建议的修复标记匹配模式:
我需要不断编写的最繁琐的语法是懒惰地初始化字典中的容器,例如:
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# 中有一些新的语法糖,可以消除预先声明变量的需要。不幸的是,我无法在我的环境中访问这些功能,并且在可预见的未来也不会。
似乎确实有一个 "check for contains key" 重构,它实现了几乎相同的结果,但缺点是执行了两次查找。
这可以通过一些扩展实现吗?我认为这是一个足够常见的案例,它已经在某个地方得到解决了。
您可以为此创建自定义模式。
- 打开 ReSharper |选项....
- 转到代码检查 |自定义模式 节点。
- 单击添加图案 按钮。
- Select替换对话框右上角
使用 添加占位符 按钮添加以下四个占位符:
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<,>
在顶部的文本区域中输入以下内容作为搜索模式:
$type$ $value$ = $dict$[$key$];
在底部的文本区域中输入以下内容作为替换模式:
$type$ $value$; if(!$dict$.TryGetValue($key$, out $value$)) { $value$ = new $type$(); $dict$[$key$] = $value$; }
可选:填写顶部的描述。我用了
Replace with TryGetValue
.- 可选:填写底部的描述。我用的一样。
- 可选:选中替换后格式复选框。
完成的对话框应该如下所示:
- 单击
Save
按钮。 - 回到
Custom Patterns
,您可以使用下拉菜单在右侧设置新模式的严重性级别。我选择了建议。 - 单击 保存 按钮退出选项。
如果您正确设置了所有内容,ReSharper 应使用建议的修复标记匹配模式: