c# - C# BitConverter.ToInt64 - 目标数组不够长
问题描述
执行以下 C# 代码时遇到问题
byte[] addr = new byte[IntPtr.Size];
IntPtr conv = (IntPtr)(BitConverter.ToInt64(addr, 0));
我得到的错误是:
System.ArgumentException: Destination array is not long enough to copy all the items in the collection. Check array index and length.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.BitConverter.ToInt64(Byte[] value, Int32 startIndex)
我仍然是 C# 的菜鸟,所以边走边学……你知道我在这里缺少什么吗?我知道目标数组似乎存在问题,但不确定为什么......任何指导都非常感谢。
解决方案
这里的潜在错误是源数组长 4 个字节,要读取 Int64 需要读取 8 个字节。
奇怪的是,您收到有关目标数组的错误。您调用的方法不应该将任何内容复制到任何数组,那么为什么要谈论目的地呢?
源中的错误消息使用由 id 标识错误的机制,在本例中为 Arg_ArrayPlusOffTooSmall。
使用这样的 id 似乎是合理的,因为 id 的名称与错误匹配。
但是,Arg_ArrayPlusOffTooSmall的大多数用途是当数组用作写入的目标而不是读取的源时,因此通过添加在这种情况下不正确的详细信息错误地使错误消息更“有用”。
恭喜,您在 .net 中发现了一个错误!
推荐阅读
- babeljs - 如何在 vue 项目中添加对 nullishCoalescingOperator 的 Babel 支持?
- amazon-dynamodb - 无法扫描 DynamoDB 映射嵌套属性
- java - 无法解析 spring-boot-starter-hateoas 中“Link”中的“of”方法
- python - 通过python根据列上的匹配合并不同的3个文件
- flutter - 如何监听 ChangeNotifier 内平面对象属性的变化?
- reactjs - 当我在反应中单击取消按钮时,为什么页面正在重新加载以及为什么它的路径也在反应中改变?
- javascript - 如何以特定格式从当前日期增加日期?
- python - 如何删除下面python代码中的括号?
- flutter - Flutter IOS 通知的 FCM 在应用程序处于后台或终止时不显示
- python - 更改 DataFrame 的所有行中的日期