• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c# - 为什么我不能使用 System.ValueType 作为泛型约束?

[复制链接]
菜鸟教程小白 发表于 2022-8-20 17:47:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

  • 为什么我不能使用约束where T : System.ValueType ?
  • 为什么 Microsoft 阻止这种类型
    从成为约束?


  • 示例:

    为什么我不能执行以下操作?
    // Defined in a .Net class
    public void bar<T>(T a) where T : ValueType {...}
    
    // Defined in my class
    public void foo<T>(T a) where T : ValueType 
    { bar<T>(a); }
    

    在 ValueType 上使用 struct 有什么区别?
    // Defined in my class
    public void foo<T>(T a) where T : struct 
    { bar<T>(a); }
    



    Best Answer-推荐答案


    使用有两个区别

    where T : struct
    


    where T : ValueType
    
  • 后者将允许 T成为 ValueType本身,这是一个引用类型。
  • 后者也允许 T为可空值类型

  • 这些差异中的第一个几乎永远不是您想要的。第二种可能偶尔有用; Nullable<T>有点奇怪,因为它既不满足 where T : struct也不是 where T : class约束。

    更有用的是约束
    where T : struct, System.Enum
    

    这是 C# 禁止的,我可以说没有充分的理由。见 my blog postUnconstrained Melody project有关更多信息。

    关于c# - 为什么我不能使用 System.ValueType 作为泛型约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1854625/

    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注0

    粉丝2

    帖子830918

    发布主题
    阅读排行 更多
    广告位

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap