C# 如何警告类型转换导致的潜在算术错误?
我正在使用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; 然而,我有许多涉及整数变量操作的初始化,我懒得逐行浏览代码来检测这些错误 相反,编译器是否可能对此发出警告?本文介绍如何设置自定义代码分析规则,以便在运行代码分析时显示警告以及
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李>
享受吧 这取决于您使用的编译器。错误消息和警告不是语言的内置功能,而是编译器添加的功能。如果您正在使用的编译器不支持此功能,则不可能。有人要求提供此功能。我正在使用随.NET 4.0和Visual Studio 2010提供的C#编译器。非常感谢您提供此信息。不幸的是,要实现一个自定义规则来解析我的代码以解决类型转换不匹配的问题并不容易。我完全理解。我想过,但这是我在研究中唯一能找到的方法。非常感谢。它并不完美,但它帮助很大。