加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 泛型类型的奇怪行为

发布时间:2020-12-15 23:58:57 所属栏目:百科 来源:网络整理
导读:请看下面的简单代码 public class A{} public class B: A{} public class GT where T : A { public T GetT() { return new A(); } } 此代码不正确 – 编译器错误“无法将A转换为返回类型T”. 但A实际上是T.如果我改变了 return new A(); 至 return new A() a
请看下面的简单代码

public class A{}

  public class B: A{}

  public class G<T> where T : A
  {
    public T GetT()
    {
      return new A();
    }
  }

此代码不正确 – 编译器错误“无法将A转换为返回类型T”.
但A实际上是T.如果我改变了

return new A();

return new A() as T;

一切都好.这种行为的原因是什么?
提前致谢

UPD:初始问题出错.现在修好了

解决方法

根据更新重新设计的答案

虽然A符合T:A的通用约束,但它是一种具体类型.但是,您的泛型类的GetT()方法具有T的泛型返回类型,因此您必须将具体类型转换为泛型类型以使返回兼容.

旧的答案适用于您之前返回新B()的情况.

老答案

泛型类型约束表明T必须从A继承;然而,它并没有说T必须是B(或它的推导),尽管B本身从A继承并满足约束.

因此返回类型不兼容(B始终为B,但T不一定是B),并且您得到错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读