gpt4 book ai didi

c# - Resharper 自定义搜索模式以警告 IDisposable 对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:17 24 4
gpt4 key购买 nike

由于 resharper 仍未发出有关实现 IDisposable 的对象的任何警告,我想创建一些可在 resharper 5.0 中使用的自定义搜索模式。

到目前为止我有这个:

(不要介意我在模式中的替换注释,我真的不关心它,我只是想在处理一次性对象时在代码中有一个明确的警告。)

- <CustomPatterns>
- <Pattern Severity="WARNING">
<Comment>This class implements IDisposable interface.</Comment>
<ReplaceComment>Please use Using statement, or dispose the object manually when done using.</ReplaceComment>
<SearchPattern>$type$</SearchPattern>
<Params />
- <Placeholders>
<IdentifierPlaceholder Name="var" Type="" ExactType="False" RegEx="" CaseSensitive="True" />
<TypePlaceholder Name="type" Type="System.IDisposable" ExactType="False" />
<ArgumentPlaceholder Name="args" Minimal="-1" Maximal="-1" />
</Placeholders>
</Pattern>
- <Pattern Severity="WARNING">
<Comment>This class implements IDisposable interface.</Comment>
<ReplaceComment>Please use Using statement, or dispose the object manually when done using.</ReplaceComment>
<SearchPattern>new $type$($args$)</SearchPattern>
<Params />
- <Placeholders>
<IdentifierPlaceholder Name="var" Type="" ExactType="False" RegEx="" CaseSensitive="True" />
<TypePlaceholder Name="type" Type="System.IDisposable" ExactType="False" />
<ArgumentPlaceholder Name="args" Minimal="-1" Maximal="-1" />
</Placeholders>
</Pattern>
</CustomPatterns>

这处理变量声明的情况,例如

Bitmap myBitmap = GetBitmap();
private Bitmap _bitmap;

和 CTOR 调用,例如

var myBitmap = new Bitmap(...);

它不支持的是:

var myBitmap = GetBitmap();

我找不到任何示例来说明如何定义将查找“var”用法或方法返回类型(即 typeof IDisposable)的搜索模式。

我确定有办法,但我找不到。

最佳答案

这些模式的问题在于,当您实际处置对象时,它们不会消失,除非是在 using 语句中的局部变量声明。它也不跟踪对象所有权,例如用于工厂方法和传递方法。所以我相信通过结构化模式来实现它几乎是无用的。

无论如何,您可能需要两种模式来进行局部变量检查,例如

var $identifier$ = $expression$; 
$type$ $identifier$ = $expression$;

其中表达式和类型正在实现 IDisposable。

关于c# - Resharper 自定义搜索模式以警告 IDisposable 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3097145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com