装箱结构列表

时间:2020-04-06 15:57:01

标签: c# .net-core boxing

我正在尝试将值装箱到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。

1 个答案:

答案 0 :(得分:0)

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

更多详细信息请参见:https://docs.microsoft.com/en-us/dotnet/standard/generics/covariance-and-contravariance?redirectedfrom=MSDN#InterfaceCovariantTypeParameters