我有一个数组和简单的循环:
static BigInteger[] dataSet = new BigInteger[] { 100913, 1009139, 10091401, 100914061, 1009140611, 10091406133, 100914061337, 1009140613399 };
foreach (BigInteger num in dataSet ) {
BigInteger[] Vector = new BigInteger[num];
for (BigInteger i = 1; i <= num; i++) {
Vector[i - 1] = i;
}
}
任何人都可以解释为什么这段代码会返回
无法将类型'System.Numerics.BigInteger'隐式转换为'int'。 存在显式转换(您是否错过了演员?)
此行中出现错误:
BigInteger[] Vector = new BigInteger[num];
一切都转换为BigInteger,我没有看到可能的原因。
感谢您的帮助,
提前致谢,
答案 0 :(得分:8)
num
是BigInteger
,但您正在使用它来初始化数组的大小:
BigInteger[] Vector = new BigInteger[num];
数组的索引器为int
,这意味着您可以创建的最大大小为int.MaxValue
(2,147,483,647)。
答案 1 :(得分:0)
我建议你放弃使用BigInteger
的方法,因为你的内存不足会分配值高于int.MaxValue
的数组。出于某种目的,数组和列表仅限于int.MaxValue
。如果在99.9%的情况下使用数组,Integer将满足您的需求。
我想知道你想要存档的是什么,为什么你需要只用递增计数器来提交如此庞大的数组呢?
为了使您的代码编译,您需要转换BigIntegers:
foreach (BigInteger num in dataSet ) {
BigInteger[] Vector = new BigInteger[(int)num];
for (BigInteger i = 1; i <= num; i++) {
Vector[(int)(i - 1)] = i;
}
}
但是你的代码很可能由于内存不足或超出范围异常而失败,因为BigInteger&gt;整数。