您好,我刚刚对我的代码运行了静态代码分析,但我不断收到错误
"Integer Operation Without Overflow Check"
有人可以帮我解决这个问题或者告诉我它到底意味着什么吗?我已经尝试使用检查关键字来解决此问题,但当我运行代码时它仍然出现。
List<String> emailList = new List<string>();
if (tbRecipients.Text.Contains(','))
{
string[] splits = tbRecipients.Text.Split(',');
for (int i = 0; i < splits.Length; i++)
{
if (splits[i].Contains(';'))
{
emailList.AddRange(splits[i].Split(';').ToList());
}
else
{
emailList.Add(splits[i]);
}
}
}
ASPX
<asp:TextBox ID="tbRecipients" runat="server" ></asp:TextBox>
最佳答案
您收到的消息表明您可能会在 int
上遇到“溢出” ,那是因为int
位于C#
是32 bit
这样你只能存储小于 2^31
的数字。所以VCG告诉你,在做几个i++
的同时你最终可能会得到 i = 2^31
这会溢出你的 int
并产生意外的代码行为。
只有在 splitted.Length == int.MaxValue
的情况下,这才可能发生在您的代码中自 splitted
是一个数组并且 Length
属性是 int
,所以当你得到i == int.MaxLength
时循环将评估 i == splitted.Length
并将转到i++
这会溢出。
但是你的循环显示 i < splitted.Length
这样i == splitted.Length
不会发生。
底线:我认为VCG发现了一条可疑的线,但没有什么可担心的。
希望这会有所帮助,祝您编码愉快。
关于c# - 无溢出检查的整数运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37710680/