我有一个返回System.Numerics.BigInteger
的属性。当我将属性转换为int时,我收到此错误。
Cannot convert type 'System.Numerics.BigInteger' to 'int'
如何在C#中将int转换为System.Numerics.BigInteger
?/
答案 0 :(得分:9)
conversion from BigInteger to Int32是明确的,因此仅将BigInteger
变量/属性分配给int
变量不起作用:
BigInteger big = ...
int result = big; // compiler error:
// "Cannot implicitly convert type
// 'System.Numerics.BigInteger' to 'int'.
// An explicit conversion exists (are you
// missing a cast?)"
这样可行(尽管如果值太大而无法放入int
变量,它可能会在运行时抛出异常):
BigInteger big = ...
int result = (int)big; // works
请注意,如果BigInteger
中的object
值已装箱,则无法将其取消装箱并同时将其转换为int
:
BigInteger original = ...;
object obj = original; // box value
int result = (int)obj; // runtime error
// "Specified cast is not valid."
这有效:
BigInteger original = ...;
object obj = original; // box value
BigInteger big = (BigInteger)obj; // unbox value
int result = (int)big; // works
答案 1 :(得分:1)
以下是将BigInteger转换为int
的一些选择BigInteger bi = someBigInteger;
int i = (int)bi;
int y = Int32.Parse(bi.ToString());
注意但是如果BigInteger值太大,它会抛出一个新的异常,所以可能会这样做
int x;
bool result = int.TryParse(bi.ToString(), out x);
或者
try
{
int z = (int)bi;
}
catch (OverflowException ex)
{
Console.WriteLine(ex);
}
或者
int t = 0;
if (bi > int.MaxValue || bi < int.MinValue)
{
Console.WriteLine("Oh Noes are ahead");
}
else
{
t = (int)bi;
}
答案 2 :(得分:1)
只有初始BigInteger值适合时才能使用int.Parse方法。如果没有,试试这个:
int result = (int)(big & 0xFFFFFFFF);
丑?是。 适用于任何BigInteger值?是的,因为它抛弃了那里的任何东西。
答案 3 :(得分:0)
答案 4 :(得分:0)
通过在输出负数时尝试改进@ lee-turpin答案,我得到了类似的解决方案,但在这种情况下没有负数的问题。就我而言,我试图从BigInteger对象获得32位哈希值。
var h = (int)(bigInteger % int.MaxValue);
仍然很难看,但它适用于任何BigInteger值。希望它有所帮助。