Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 给定的表达式始终为提供的类型_C#_Compiler Warnings_Reference Type - Fatal编程技术网

C# 给定的表达式始终为提供的类型

C# 给定的表达式始终为提供的类型,c#,compiler-warnings,reference-type,C#,Compiler Warnings,Reference Type,为什么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) 因为它不是由微软实现的。但它是由执行的 Visual Studio显示2个编译器警告: ReSharper显示4个警告: 不能重载is运算符 请

为什么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)

因为它不是由微软实现的。但它是由执行的

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

ReSharper显示4个警告:


不能重载
is
运算符

请注意,
is
运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,例如用户定义的转换


来源:

这是一种启发式,根据定义,启发式是不完整的

此启发式的源代码可在此处找到:。代码包含以下引用:

// 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
是非空表达式(如示例中所示),则可以改进启发式。然而,每一个警告(事实上,每个编译器特性)都有成本,显然,RoLyn开发者没有考虑这个特性对这个版本足够重要。


如图所示,有第三方解决方案填补了这一空白。

请对引用的内容使用引文字符>。很好的答案:)虽然这在Visual Studio中很好,但在使用
将警告视为错误时,它不会中断生成。见此: