编程语言
首页 > 编程语言> > c# – 如何定义已检查整数的列表

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