C# - 编译器错误 - 将 int[] 分配给 object[] 时

2023-12-26

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            object[] obj = new object[3];
            obj[0] = new object();
            obj[1] = "some string";
            obj[2] = 10;

            string[] strings = new string[] { "one", "two", "three" };
            obj = strings; //---> No Error here, Why ?

            int[] ints = new int[] { 1, 2, 3 };
            obj = ints; /*-> Compiler error - Cannot implicitly convert type 'int[]' to 'object[]', Why ?*/ 
        }
    }
}

在执行如上所示的步骤时,我收到编译器错误。但是,在前面的步骤中,没有错误。有人可以向我解释这种行为吗?我用的是VS 2010。

编辑 - 为了完整性,再次,这不会编译 - .NET 4.0 中的方差支持现已清理。可以使用新的关键词in and out具有泛型类型参数。

    List<object> objectList = new List<object>();
    List<string> stringList = new List<string>();
    objectList = stringList;

仅引用类型的数组(例如String) 可以分配给其他引用类型的数组(例如Object)。自从int是值类型,它的数组不能分配给其他类型的数组。

更具体地说,这称为数组协方差 http://msdn.microsoft.com/en-us/library/aa664572(v=VS.71).aspx。仅当数组中存储的位模式与目标类型兼容时,它才有效。例如,a 中的位String[]都是对字符串的引用,可以安全地复制到存储对象引用的内存位置。然而,值类型数组存储元素的实际数据(而不只是对它们的引用)。这意味着一个int[]将实际的 32 位整数存储在数组的元素中。由于无法将 32 位整数安全地复制到存储对对象或任何其他类型的引用的内存位置,因此您不能将它们的数组分配给任何其他类型的数组。

请注意,从技术上讲,int可以安全地复制到存储的内存位置uint(反之亦然)。这意味着你应该能够做类似的事情int[] x = new uint[10]。这实际上并不是协方差,C# 也不允许这样做。但是,它在 CLR 中是合法的,如果您愿意,您可以说服 C# 让您这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 编译器错误 - 将 int[] 分配给 object[] 时 的相关文章

随机推荐

  • 如何在 flutter 中获取我的 .db 文件或文件路径?

    我已经在名为 cities db 的文件中恢复了一些信息 并将其放在项目路径 assets 中 你能告诉我如何获取它吗 安装应用程序后 我可以在路径 data data pkgName code cache xxx xxx build fl
  • ASP.Net MVC:IAuthorizationFilter/Attribute 首选登录安全检查?

    IAuthorizationFilter 与属性相结合是在控制器运行进程之前检查用户是否登录的首选方法吗 由于我是 MVC 新手 我一直在尝试找出如何处理在 WebForms 中完成的情况 我昨天遇到的问题是根据是否登录来检查用户是否能够查
  • Xslt 组父/子

    我在从 xml xslt 转换中获取以下结果时遇到问题
  • 如何使用请求来衡量下载速度和进度?

    我在用requests下载文件 但对于大文件 我需要每次检查磁盘上文件的大小 因为我无法以百分比显示进度 而且我还想知道下载速度 我该怎么做呢 这是我的代码 import requests import sys import time im
  • OpenCL:SIMT执行模型的基本问题

    SIMT 架构的一些概念和设计我仍然不清楚 根据我所看到和阅读的内容 不同的代码路径和 if 一起是一个相当糟糕的主意 因为许多线程可能会同步执行 那么这究竟意味着什么呢 怎么样 kernel void foo int flag if fl
  • 如何逐行读取文本区域 HTML 标记

    我有一个文本区域 其中每行都包含整数值 如下所示 1234 4321 123445 我想检查用户是否确实输入了有效值 而不是一些有趣的值 如下所示 1234 987l 为此 我需要逐行读取文本区域并验证它 如何使用 javascript 逐
  • Flutter Android 警报管理器不工作

    我已经安装了Android 闹钟管理器 https pub dartlang org packages android alarm manager按照链接中的说明将插件添加到我的 Flutter v1 0 0 应用程序中 但是当我尝试使用A
  • 无法在ubuntu v-20.04.1中安装nodejs

    我正在尝试使用此命令安装 nodejs 版本 14 15 4 apt install nodejs 14 15 4 但我收到这个错误 E 找不到 nodejs 的版本 14 15 4 我在这个命令中犯了什么错误 或者有什么更好的安装方法吗
  • 如何修复 Angular 6 中文件上传时出现的 415 不支持的媒体类型

    我负责 Net Core Web Api 和 Angular 应用程序 我创建了一个控制器 它将图像链接到数据库中的项目 HttpPut Action id public async Task
  • 如何对UDP协议进行拥塞控制?

    我有一个自定义的 UDP 协议 具有多个发送器 接收器 旨在尽可能快地发送大文件 它是基于客户端 服务器的 如何检测 LAN 上的拥塞情况以降低 UDP 数据包的发送速率 编辑 请不要评论UDP的使用是否合适 该协议使用 UDP 但在数据包
  • Java 中的 DI 没有注释?

    有没有什么方法 现有框架 可以在 Java 中配置 DI 而不必向 不属于 的类添加注释 在我的研究中 看起来要完成构造函数注入 我们需要向构造函数添加一些注释 如下所示 Inject or Autowired for Spring Boo
  • 无法对“XMLHttpRequest”执行“发送”

    我正在开发一个使用ajax 的Cordova 应用程序 我的问题是 在调试中 应用程序正在运行 但是当我构建一个版本时 我收到了错误 readyState 0 status 0 statusText NetworkError Failed
  • 如何使 type="number" 只为正数

    目前我有以下代码
  • 在 TeamCity 构建步骤中获取构建作业 URL

    我有一个 Microsoft Teams Webhook 当 TeamCity 构建失败时它会提醒我 我想知道如何获取当前 TeamCity 版本的 URL 以便可以将此信息传递到我的 webhook 仅使用手头的参数 您就可以将 uri
  • 如何使用 Ajax 和 Jquery 从 PHP 数据库中提取信息,并使用该信息填充元素?

    我正在调整一个网站 以便员工更轻松地编辑产品 现在 必须有人登录数据库并更改价格 然后必须有人更改网站本身的物理 html 因此 我正在编写代码 从数据库中提取所有产品 并将它们显示在可以编辑的页面上 我认为用 Ajax 来做所有事情都是最
  • 阻止 Word 2010 保存 o:gfxdata base64 或 uuencoded VML?

    我正在处理包含多个绘图画布的 docx 文件 其中插入了图像以及在 Word 2010 中绘制的一些线条和箭头 我使用的是没有兼容模式的 2010 格式 Word 插入一个o gfxdata属性到每个v shape and v group元
  • ORA-01400: 无法将 null 插入 (TABLE.COLUMN)(休眠)

    我正在使用 hibernate 4 3 oracle 11 当我想插入一个员工时 它与类别有一对多的关系 一个类别有很多员工 首先我将一个类别插入数据库 然后我尝试将一个员工插入数据库并得到一个异常 实体的代码是由hibernate生成的
  • 如何在 PowerShell 中标准化路径?

    我有两条路 fred frog and frag 我可以在 PowerShell 中将它们连接在一起 如下所示 join path fred frog frag 这给了我这个 fred frog frag 但我不想要这样 我想要一个没有双点
  • Android - 具有多个底部导航菜单的导航组件

    我有一个 Android 应用程序 Java 它使用导航组件来设置底部导航 该应用程序由一个活动 主 组成 其他所有内容都以片段形式加载 这个想法是让启动屏幕启动并检查用户是否登录 如果用户登录 则加载主屏幕并且底部导航 之前隐藏 变得可见
  • C# - 编译器错误 - 将 int[] 分配给 object[] 时

    namespace ConsoleApplication1 class Program static void Main string args object obj new object 3 obj 0 new object obj 1