suj*_*lil 3 c# exception list integer-overflow
我有一个定义的整数列表List<int> myIntList = new List<int>();像往常一样我将使用myIntList.Add()方法向列表添加值 .我面临的问题是列表中的值是动态的(一些计算的结果),可能超过整数可以容纳的最大值.
请考虑以下情形:
int x = int.MaxValue;
myIntList.Add(x + 1);
Run Code Online (Sandbox Code Playgroud)
这将添加-2147483648到列表而不是抛出异常.我需要在这里抛出异常.我知道myIntList.Add(checked(x + 1));会完美地完成这项工作,或者我甚至可以将myIntList.Add()包含在内checked{},如下所示:
checked
{
myIntList.Add(12);
myIntList.Add(int.MaxValue);
myIntList.Add(x + 1);
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题这有什么替代方案吗?我可以定义已检查整数的列表吗?如何在列表中添加的值超出限制的情况下创建引发异常的列表?
更新:
谢谢大家的回复,大多数人建议在将它们添加到列表之前检查整数(如果它超出边界则抛出异常).这与我通过给定的片段所做的相同checked{// add elements },它将抛出异常而不需要任何复杂的条件检查.
您正在错误的级别上解决问题.首先,你的计算-它返回某种类型的值- int,long等它不应该在那里检查溢出?它没有溢出,但返回long,例如?
如果在添加到容器时仍应执行此操作,则可以创建如下所示的检查列表:
class CheckedList : List<int>
{
public void Add(long x)
{
if (int.MaxValue < x || int.MinValue > x) throw new ArgumentOutOfRangeException("Invalid");
var i = (int) x;
base.Add(i);
}
}
Run Code Online (Sandbox Code Playgroud)