我有一个基类:
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.
答案 0 :(得分:2)
通过使用约束,您可以让编译器知道T基于TestBase。 这样就可以避免丢失类型检查。
public class SomeClass
{
public T GetInstance() where T : TestBase
{
var inst=new TestDerived();
return inst;
}
}
但为什么你需要使用泛型呢?这里没有什么可以从中受益。