当结构是在 C# 中转换的通用对象的协变类型时,结构无法转换为对象的任何解决方法?

Any workarounds for structs failing to cast to object when the struct is the covariant type of a generic object being being casted in C#?

假设我用 struct 的协变类型参数实例化一个泛型 class,然后我将新创建的对象作为其自身使用类型参数 object struct 的位置,尽管方差应该允许,但转换将失败。

示例:

public class Succeeds {}
public struct Fails {}

var castSucceeds = (IEnumerable<object>)Enumerable.Empty<Succeeds>();
var castFails = (IEnumerable<object>)Enumerable.Empty<Fails>();

正如您从上面看到的那样,由于 IEnumerable<T> 的通用类型是协变的,所以此转换有效,但是当尝试使用 struct 而不是 class 时,它会失败。我怀疑失败与将结构转换为对象时需要装箱有关。

有什么办法解决这个问题,还是我看错了?

根据Microsoft

Variance applies only to reference types; if you specify a value type for a variant type parameter, that type parameter is invariant for the resulting constructed type.

尝试进行手动投射:

var castFails = Enumerable.Empty<Fails>().Cast<object>();