我有一个整数列表定义为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);
}
这是我的问题有什么替代方案吗?我可以定义一个检查整数列表吗?如何制作一个列表,在添加到列表中的值超出限制的情况下抛出异常?
Updates:
谢谢大家的回复,大多数人建议在将它们添加到列表之前检查整数(如果超出边界则抛出异常)。这与我通过给定代码片段所做的相同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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)