通常,我有如下代码片段:
private void OnChangeLanguageCommandExecuted(object obj)
{
pLngService.ChangeLanguage(newLcid);
}在这种情况下,ChangeLanguage(...)方法返回一个值,尽管该值(成功为true,不成功为false )不被使用。问题是,当查看此方法返回值的代码时,我完全不知道。
我没有写这个方法,也没有控制它。
因此,我想在全球范围内执行一项政策:
必须为每个非空返回方法分配一个变量,例如var unused = pLngService.ChangeLanguage(newLcid);。
或者应该使用丢弃操作符,以使其更显式:_ = pLngService.ChangeLanguage(newLcid);
当然,我对其他建议持开放态度,这里的主要目标是使两个方法都返回一个值,并且我选择放弃它。
我希望对visual或Resharper有一条规则,在这里我可以通过生成编译器警告来提前执行这个策略。我不想让这成为一个编译器错误,这似乎是严格的。我做了一些快速环顾四周,但我没有发现任何oob,但我觉得我忽视了一些东西。
我正在使用vs2017 (net4)和vs2019 (net8/netcore3.0)中的项目,所以在这两种设置中都能工作的东西将是很棒的。
编辑:我在编写罗斯林代码分析器时发现,你可以用https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/ide0058来配置它。
代码修复正是我所要寻找的:
// Original code:
System.Convert.ToInt32("35");
// After code fix for IDE0058:
// csharp_style_unused_value_expression_statement_preference = discard_variable
_ = System.Convert.ToInt32("35");
// csharp_style_unused_value_expression_statement_preference = unused_local_variable
var unused = Convert.ToInt32("35");有以下规则:
csharp_style_unused_value_expression_statement_preference
有备选方案:
选项值discard_variable -倾向于将未使用的表达式分配给丢弃的unused_local_variable,更愿意将未使用的表达式分配给从未使用
的局部变量。
发布于 2020-12-13 12:47:13
对于未来的读者,请参考代码规则IDE0058:https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/ide0058还请参阅:https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/code-style-rule-options?view=vs-2019关于如何配置编辑器规则。
这应该能提供你所需要的。如果这是不可用的,或者在您的VS的特定版本中,规则是错误的,那么您也可以看看我在星期六早上做的这个快速罗斯林分析器:
https://github.com/sommmen/DiscardReturnValueAnalyzer/tree/master
她工作,但仍有一些事情我不满意,比如实际的分析信息。但是由于IDE0059应该已经涵盖了这个用例,所以我不会在这方面投入更多的精力。如果您出于某种原因需要这个,可以随意创建一个问题,我可能会看一看。
此外,回购没有出版或其他什么,所以你将不得不克隆和建设它自己。
附注:一旦你掌握了他们的诀窍,罗斯林分析器就很棒了。
https://stackoverflow.com/questions/65091299
复制相似问题