Solidity 硬编码 uint256 值数组的初始值失败

Sir*_*b33 1 arrays blockchain ethereum solidity

我\xe2\x80\x99m 尝试创建一个包含 10 个整数的数组 ( uint256) 并对其初始起始值进行硬编码 - 但我不断收到以下错误(奇怪地谈论uint16,即使我特别要求uint256):

\n
TypeError: Type uint16[10] memory is not implicitly convertible to expected type uint256[] memory.\n
Run Code Online (Sandbox Code Playgroud)\n

这里\xe2\x80\x99是我的代码:

\n
uint256 memory myNumbersArray = new uint256[](10);\nmyNumbersArray = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]; \n
Run Code Online (Sandbox Code Playgroud)\n

我也尝试过这样的方法:

\n
uint256[10] memory myNumbersArray;\nmyNumbersArray = [0, 100, 200, 300, 400, 500, 600, 700, 800, 900]; \n
Run Code Online (Sandbox Code Playgroud)\n

结果相同。

\n

(我想我也尝试过用一行来完成整个事情。)

\n

我收到此错误是因为 I\xe2\x80\x99m 分配的实际值太小,以至于它们不需要\xe2\x80\x99t 类型吗uint256
\n我需要知道这一点,因为该数组应该保存的未来uint256值绝对足够大,值得成为 类型。

\n

我该如何解决这个问题?\n我分配的起始值不是填充/虚拟值 - 它们正是我需要的值。所以它\xe2\x80\x99并不是我可以无缘无故地插入一堆疯狂的高数字只是为了通过编译或其他东西。

\n

小智 5

您可以将第一个值转换为 uint256 类型,整个数组将是该类型。

uint256[10] memory myNumbersArray;
myNumbersArray = [uint256(0), 100, 200, 300, 400, 500, 600, 700, 800, 900]; 
Run Code Online (Sandbox Code Playgroud)