当前位置:  开发笔记 > 编程语言 > 正文

给定的表达式始终是提供的类型

如何解决《给定的表达式始终是提供的类型》经验,为你挑选了2个好方法。

为什么Visual Studio在使用is值类型时会对此发出警告,但在引用类型时却没有?第1行和第2行引发警告,而第3行和第4行则没有.

if (5 is object)
if (new Point() is object)

if ("12345" is object)
if (new StringBuilder() is object)

Heinzi.. 9

根据定义,它是一种启发式和启发式,是不完整的.

这个启发式的源代码可以在这里找到:Roslyn来源:Binder.GetIsOperatorConstantResult.该代码包含以下引用:

// The result of "x is T" can be statically determined to be true if x is an expression 
// of non-nullable value type T. If x is of reference or nullable value type then
// we cannot know, because again, the expression value could be null or it could be good. 

显然,如果已知(如在您的示例中)x非空表达式,则可以改进启发式.但是,正如Eric Lippert在他的博客中写道的那样,每一个警告(事实上 - 每个编译器功能)都有成本,而且显然,Roslyn开发人员并不认为这个特性对于这个版本来说非常重要.

正如Thomas Weller的回答所示,有第三方解决方案填补了这一空白.



1> Heinzi..:

根据定义,它是一种启发式和启发式,是不完整的.

这个启发式的源代码可以在这里找到:Roslyn来源:Binder.GetIsOperatorConstantResult.该代码包含以下引用:

// The result of "x is T" can be statically determined to be true if x is an expression 
// of non-nullable value type T. If x is of reference or nullable value type then
// we cannot know, because again, the expression value could be null or it could be good. 

显然,如果已知(如在您的示例中)x非空表达式,则可以改进启发式.但是,正如Eric Lippert在他的博客中写道的那样,每一个警告(事实上 - 每个编译器功能)都有成本,而且显然,Roslyn开发人员并不认为这个特性对于这个版本来说非常重要.

正如Thomas Weller的回答所示,有第三方解决方案填补了这一空白.


很棒的答案:)

2> Thomas Welle..:

因为它没有由Microsoft实现.但它是由例如JetBrains ReSharper实施的.

Visual Studio显示2个编译器警告:

视觉工作室

ReSharper显示4个警告:

ReSharper的

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有