【发布时间】:2012-07-12 22:56:42
【问题描述】:
我如何检测类型 x 是否可以从类型 y 分配,不仅通过继承层次结构而且通过协变和逆变?
【问题讨论】:
标签: c# reflection .net-4.0 covariance contravariance
我如何检测类型 x 是否可以从类型 y 分配,不仅通过继承层次结构而且通过协变和逆变?
【问题讨论】:
标签: c# reflection .net-4.0 covariance contravariance
IsAssignableFrom 确实检查协方差和逆变,你不需要其他任何东西:
// Covariance
typeof(IEnumerable<object>).IsAssignableFrom(typeof(IEnumerable<string>)).Dump(); // true
typeof(IEnumerable<string>).IsAssignableFrom(typeof(IEnumerable<object>)).Dump(); // false
// Contravariance
typeof(Action<string>).IsAssignableFrom(typeof(Action<object>)).Dump(); // true
typeof(Action<object>).IsAssignableFrom(typeof(Action<string>)).Dump(); // false
【讨论】: