c# - 泛型的奇怪行为

标签 c# generics

请看下面的简单代码

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:最初的问题有错误。现已修复

最佳答案

想象一下如果你这样做会发生什么:

public class C : A{}

G<C> x = new G();
C c = x.GetT();

你真的不希望它返回一个 B 引用...

as 运算符可以工作,因为如果 T 不是 B,它只会返回 nullA...但这可能不是真正您的意思。

在不知道您要做什么的情况下,很难知道要建议的行动方案。

关于c# - 泛型的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5990933/

相关文章:

c# - 如何将 LINQ 结果匿名类型传递给另一个方法?

c# - 是否可以在不同的网格后面有一个组件,在不同的网格上方有一个组件

c# - "Fold"LINQ 扩展方法在哪里?

C# Covariance puzzle,我遇到过

java - 接受两种类型的 List 的通用方法

java - 如何使用 IntelliJ 伪造 C++ 风格的 "auto"类型推导?

c# - 即使它在那里也找不到 View ,它不是在寻找正确的扩展名

c# - 测试消息框是否在单元测试中成功显示

java - (如何)我可以用 Java 泛型做到这一点吗?

ios - 如何检查通用 View 类是否实际实现了 init(frame :)?