c# – 如何定义已检查整数的列表
作者:互联网
我有一个定义为List< int>的整数列表myIntList = new List< int>();像往常一样,我将使用myIntList.Add()方法为列表添加值.我面临的问题是列表中的值是动态的(一些计算的结果),可能超过整数可以容纳的最大值.
请考虑以下情形:
int x = int.MaxValue;
myIntList.Add(x + 1);
这将在列表中添加-2147483648而不是抛出异常.我需要在这里抛出异常.我知道myIntList.Add(checked(x 1));将完美地完成工作,或者我甚至可以将myIntList.Add()括在checked {}中,如下所示:
checked
{
myIntList.Add(12);
myIntList.Add(int.MaxValue);
myIntList.Add(x + 1);
}
这是我的问题这有什么替代方案吗?我可以定义已检查整数的列表吗?如何在列表中添加的值超出限制的情况下创建引发异常的列表?
更新:
谢谢大家的回复,大多数人建议在将它们添加到列表之前检查整数(如果它超出边界则抛出异常).这与我通过给定的片段检查{//添加元素}所做的相同,它将抛出异常而不进行任何复杂的条件检查.
解决方法:
您正在错误的级别上解决问题.首先,你的计算 – 它返回某种类型的值 – int,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);
}
}
标签:c,exception,integer-overflow,list 来源: https://codeday.me/bug/20190713/1449256.html