Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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#_Math_Compiler Warnings_Implicit Conversion_Arithmetic Expressions - Fatal编程技术网

C# 如何警告类型转换导致的潜在算术错误?

C# 如何警告类型转换导致的潜在算术错误?,c#,math,compiler-warnings,implicit-conversion,arithmetic-expressions,C#,Math,Compiler Warnings,Implicit Conversion,Arithmetic Expressions,我正在使用C#编写一个计算模块,我偶然发现了这个: double v = 4 / 100; 我知道这是一个错误的初始化,返回的是v=0.0,而不是v=0.04 c#规则规定,我必须确保至少有一名成员是双人,如下所示: double v = (double) 4 / 100; double v = 4.0 / 100; 然而,我有许多涉及整数变量操作的初始化,我懒得逐行浏览代码来检测这些错误 相反,编译器是否可能对此发出警告?本文介绍如何设置自定义代码分析规则,以便在运行代码分析时显示警告以及

我正在使用C#编写一个计算模块,我偶然发现了这个:

double v = 4 / 100;
我知道这是一个错误的初始化,返回的是
v=0.0
,而不是
v=0.04

c#规则规定,我必须确保至少有一名成员是双人,如下所示:

double v = (double) 4 / 100;
double v = 4.0 / 100;
然而,我有许多涉及整数变量操作的初始化,我懒得逐行浏览代码来检测这些错误


相反,编译器是否可能对此发出警告?

本文介绍如何设置自定义代码分析规则,以便在运行代码分析时显示警告以及其他警告


好吧,在玩了一些游戏之后,我有了一个解决方案。我曾经使用过这个解决方案。我使用,所以您需要获取并安装它。然后,你可以下载我的C#项目

首先,我没有解释所有类型转换不匹配的原因。事实上,我只能容纳一部分

基本上,我检查行是否包含“double”后跟空格。我确实知道这可能会导致错误警告,因为类的结尾可能是两倍或任何数量的其他内容,但我将把这留给您来解决如何正确隔离类型的问题

如果找到匹配项,我会检查它是否匹配此正则表达式:

double[ ][A-Za-z0-9]*[ ]?=(([ ]?[0-9]*d[ ]?/[ ]?[0-9]*;)|[ ]?[0-9]*[ ]?/[ ]?[0-9]*d;)
如果它与这个正则表达式不匹配,那么我会添加一个冲突。此正则表达式将匹配以下任一项:

  • 双i=4d/100
  • 双i=4d/100
  • 双i=4/100d
  • 双i=4/100d
  • 双i=4/100d
  • 双i=4/100d
  • 双i=4d/100
  • 双i=4/100d
  • 双i=4/100d
上述任何一项都不会造成违反。正如目前所写的,如果不使用'd',它将抛出一个违规。您需要添加额外的逻辑来解释显式转换操作数的其他可能方式。在我写这篇文章时,我刚刚意识到在两个操作数上都有一个“d”很可能会引发异常。哎呀

最后,我无法让StyleCop正确显示我的违规行为。它不断地给我一个关于规则不存在的错误,即使有第二双眼睛盯着它,我们也找不到解决方案,所以我入侵了它。错误显示了您试图查找的规则的名称,因此我只是将规则的名称作为描述性的内容,并将行号包含在其中

要安装自定义规则,请构建MathematicalAnalyzer项目。关闭Visual Studio并将DLL复制到StyleCop安装目录中。打开VisualStudio时,应该可以在StyleCop设置中看到规则。我使用的文章的第5步和第6步说明了在哪里可以做到这一点

在整个解决方案中,一次只会收到一个冲突,因此您必须修复它显示的冲突,然后再次运行StyleCop以查找下一个冲突。也许有办法解决这个问题,但我的果汁用完了,就停在这里


享受吧

这取决于您使用的编译器。错误消息和警告不是语言的内置功能,而是编译器添加的功能。如果您正在使用的编译器不支持此功能,则不可能。有人要求提供此功能。我正在使用随.NET 4.0和Visual Studio 2010提供的C#编译器。非常感谢您提供此信息。不幸的是,要实现一个自定义规则来解析我的代码以解决类型转换不匹配的问题并不容易。我完全理解。我想过,但这是我在研究中唯一能找到的方法。非常感谢。它并不完美,但它帮助很大。