Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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_Implicit Conversion - Fatal编程技术网

为隐式转换(C#)启用编译器警告

为隐式转换(C#)启用编译器警告,c#,compiler-warnings,implicit-conversion,C#,Compiler Warnings,Implicit Conversion,有没有办法在C#中为隐式转换启用编译器警告 最近我已经调试了一个多小时,直到我意识到我有以下代码: double = int / int; 但这并没有达到预期的效果。编译器不会显示任何警告,即使是在警告级别4。我正在与Microsoft Visual Studio 2013合作 我认为这是因为将int值赋给double不需要转换。如果您尝试相反的方法: double a = 5; int b = a; 您将得到一个“无法隐式地将double转换为int”错误。但是如果你尝试你正在做的事情:

有没有办法在C#中为隐式转换启用编译器警告

最近我已经调试了一个多小时,直到我意识到我有以下代码:

double = int / int;

但这并没有达到预期的效果。编译器不会显示任何警告,即使是在警告级别4。我正在与Microsoft Visual Studio 2013合作

我认为这是因为将int值赋给double不需要转换。如果您尝试相反的方法:

double a = 5;
int b = a;
您将得到一个“无法隐式地将double转换为int”错误。但是如果你尝试你正在做的事情:

int a = 5;
double b = a;
它工作正常

double的最大值比int高(可能最小值也比int低),因此不需要进行转换,因此将double指定为int不会产生任何副作用,因此不需要出现错误。我注意到,即使启用了最严格的规则集,vs2013中的代码分析工具也不会引起注意

C#已经警告说,安全转换的数量太多了,但正如其他人所观察到的,似乎你真的在寻找整数(截断)除法的自动检测。不幸的是,它与MSIL中的
DIV
操作码相同,因此需要进行类型分析来检测它。这不是不可能的,但很重要。

这个“问题”更像是一个启发式问题

实际上,您的代码正在执行以下操作

int numerator = ...;
int denominator = ...;
int integerDivide = numerator / denominator;
double result = integerDivide;
在任何时候都没有编译器应该标记为错误的东西。当然,您可以将整个过程视为一个警告,但这并不符合编译器工作的精神


可以在某些生产率工具上添加此警告,如Resharper或Roslyn。但它永远不会被添加到核心编译器中。

不。。。因为从编译器的角度来看,这样的代码并没有什么错误。从int到double的隐式转换不是你的问题;正是整数除法让你失去了精度。不,规则不是“除法的结果就是你要除法的结果”。double被int除法也会产生double。好吧,我会被jiggered,你是对的。我知道编译器看到了什么,并且除法发生了错误,但是如果我想
result
成为
int
,这个问题也不会存在。事实上,编译器隐式地将
int
转换为
double
,无论在何种情况下,我都希望得到一个警告。C++编译器警告用户从基本类型到每个基本类型的隐式转换。