2011-08-26 129 views
3

可能重复:
polymorphic resolution of generic parameters in Unity registerType铸造泛型

这可能是显而易见的。但有人可以告诉我为什么这不是有效的代码?编译器说它不能将Class1<string>转换为Class1<object>。 这种方式是否是仿制药不允许的上传?如果是这样,为什么不呢?

namespace Test 
{ 
    public class Tests 
    { 
     public void Test() 
     {    
      Class1<object> objectClass1 = new Class1<string>(); 
     } 
    } 
    class Class1<T> 
    { 
    } 
} 
+6

这是一个常见问题,寻找协方差。这里是关于这个主题的一个线程:http://stackoverflow.com/questions/2662369/covariance-and-contravariance-real-world-example – JohnD

+1

另请参见[我对类似问题的回答](http://stackoverflow.com/questions/4269279/polymorphic-resolution-of-generic-parameters-in-unity-registertype/4269376#4269376)解释为什么*这是不允许的。 – cdhowie

回答

-5

String,Int32等是Struct类型,而object,Person等是C#的类对象。 因此,当您创建泛型时,如果您打算使用铸造特征,则必须指定一个约束。 所以,你可以使用

public void Method<T>() where T : class 
or 
public void Method<T>() where T : struct 
+0

这与问题完全无关。 – Gabe