首页 > 解决方案 > 装箱结构列表

问题描述

我正在尝试将值装箱到 IEnumerable 中,以便 JsonConverter 能够循环遍历动态数据。但是,在尝试对 DateTime 列表或其他结构进行装箱时遇到了问题。

        var datetime = DateTime.Now ;
        var boxed = datetime as object;  // Works: boxed is still a DateTime value

        var datetimeList = new List<DateTime> { DateTime.Now };
        var boxedEnumerable = datetimeList as IEnumerable<object>; // Does not work, boxedEnumerable is null

转换为 IEnumerable 似乎适用于所有引用类型,但不适用于值类型。

注意:非泛型 IEnumerable 类可用于这些类型的转换,而不是 IEnumerable。

标签: c#.net-coreboxing

解决方案


差异仅适用于引用类型;如果为变体类型参数指定值类型,则该类型参数对于生成的构造类型是不变的

可以在此处找到更多详细信息:https ://docs.microsoft.com/en-us/dotnet/standard/generics/covariance-and-contravariance?redirectedfrom=MSDN#InterfaceCovariantTypeParameters


推荐阅读