【问题标题】:IsAssignableFrom in covariance and contravariance协变和逆变中的 IsAssignableFrom
【发布时间】:2012-07-12 22:56:42
【问题描述】:

我如何检测类型 x 是否可以从类型 y 分配,不仅通过继承层次结构而且通过协变和逆变?

【问题讨论】:

    标签: c# reflection .net-4.0 covariance contravariance


    【解决方案1】:

    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
    

    【讨论】:

    • 谢谢,我没有意识到它会检查协变和逆变。 Google 上的一篇文章似乎另有说明。
    猜你喜欢
    • 2015-02-09
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2014-03-06
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多