首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制执行非空返回方法,以始终将其赋值给变量或丢弃。

强制执行非空返回方法,以始终将其赋值给变量或丢弃。
EN

Stack Overflow用户
提问于 2020-12-01 13:22:30
回答 1查看 271关注 0票数 4

通常,我有如下代码片段:

代码语言:javascript
复制
        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来配置它。

代码修复正是我所要寻找的:

代码语言:javascript
复制
// 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,更愿意将未使用的表达式分配给从未使用

的局部变量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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应该已经涵盖了这个用例,所以我不会在这方面投入更多的精力。如果您出于某种原因需要这个,可以随意创建一个问题,我可能会看一看。

此外,回购没有出版或其他什么,所以你将不得不克隆和建设它自己。

附注:一旦你掌握了他们的诀窍,罗斯林分析器就很棒了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65091299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档