无法将类型'System.Numerics.BigInteger'隐式转换为'int'。存在显式转换(您是否错过了演员?)

时间:2018-05-11 10:59:39

标签: c# .net

我有一个数组和简单的循环:

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,我没有看到可能的原因。

感谢您的帮助,

提前致谢,

2 个答案:

答案 0 :(得分:8)

numBigInteger,但您正在使用它来初始化数组的大小:

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;整数。