返回派生类throws的泛型方法Object必须实现IConvertible异常

时间:2015-10-23 02:28:28

标签: c# generics

我有一个基类:

public class TestBase
{
}

我有一个派生类

public class TestDerived: TestBase
{
}

我有generic method

  public class SomeClass
  {
   public T GetInstance()
   {
      var inst=new TestDerived();
      return (T)Convert.ChangeType(inst, typeof(T)); //exception thrown here
   }
  }

我打个电话:

    SomeClass test=new SomeClass()
    var x= test.GetInstance<TestBase>(); 

为什么我会收到System.InvalidCastException : Object must implement IConvertible.

的异常

1 个答案:

答案 0 :(得分:2)

通过使用约束,您可以让编译器知道T基于TestBase。 这样就可以避免丢失类型检查。

public class SomeClass
{
   public T GetInstance() where T : TestBase
   {
      var inst=new TestDerived();
      return inst;
   }
}

但为什么你需要使用泛型呢?这里没有什么可以从中受益。